c语言位运算符速成

news2024/9/24 23:30:00

本篇文章对c语言速成系列的补充,其中的内容会涉及原反补以及& 、| 、 ~ 、^、位运算等等。那么,闲话少叙,我们直接进入正题

首先我们先来讲讲原反补

进制转换(前置知识)

在学原反补之前我们先来学几个机制转换的技巧

二进制转十进制

首先就是权重,也许会有小伙伴不理解权重,那么权重是什么东西呢?请看下图

从上图中我们可以很明显地看出权重其实就是10的n次方,那么二进制呢也是和十进制是一样的,也是有权重这一概念,也就是2的n次方

什么?你听到这里就更加模糊了,别急我们这就上大招。

识别:2——>10(二进制转十进制)

技巧:8421法

那么怎么使用呢请看下图

二进制转八进制

上面的专业内容有兴趣可以看一下,这里我们直接上大招

识别:2->8

技巧:421法

二转十六进制

识别:2->16

技巧:8421按位填,位数之和小于10,数字从0到9网上填,位数之和9之上,小写a到f替

总结:

学完了前置知识,那么我们就可以来学原反补了

原反补之间的相互转换

整数(包括有符号的整数)的二进制有三种:分别是原码、反码、补码,并且均有数值位和符号位

最高位也就是原码的32个1、0中的第一个数就是它的符号位(不懂没关系下面会细讲),符号位中0位正,1为负

什么是原码?

直接将数值按照正负数的形式翻译成⼆进制得到的就是原码。

什么是反码?

将原码的符号位不变,其他位依次按位取反就可以得到反码。

什么是补码?

反码+1就得到补码。

符号位就是原反补码的第一个数,后面的数全是是数值位

那么总结一下它们之间的转换思路

总结:

原码:十进制(这里不一定是十进制,也可以是八进制或十六进制)->二进制

原码->反码:符号位不变,数值位为1的改为0,为0的改1

反码->补码:反码+1就得到补码。

按位与&

运算规则

只有两个数的二进制同时为1,结果才为1,否则为0。(负数按补码形式参加按位与运算)

举例:int x = 3,  y = 5

x的二进制:00000011

y的二进制:00000101

x&y = 00000001

从上述的例子和运算规则我们可以总结一个小妙招

小妙招

同则1,异则0

按位或|

运算规则

参加运算的两个数只要两个数中的一个为1,结果就为1。

举例:

int x = 3,  y = 5;

x的二进制:00000011

y的二进制:00000101

那么这里直接上小妙招

小妙招

有1则为1

操作符取反

定义: 取反操作符是位运算符的中一个,作用是按位补运算符翻转操作数的每一位

举例:

int x = 3;

x(10 -> 2) = 00000011

x~ = 11111100

总结:0变1,1变0

解释:原来是0的变为1, 原来是1的变为0

按位异或^

运算规则:参加运算的两个数,如果两个相应位为“异”(值不同),则该位结果为1,否则为0。

举例:

int x = 3, y = 5;

x(10->2) = 00000011

y(10->2) = 00000101

x ^ y = 00000110

必备知识点:0 ^ 0 = 0     0 ^ 1 = 1

总结:值相同则为0,值不同则为1 

拓展部分

算法题

关键词:只出现一次的元素

思路

代码编写

class Solution {
public:
    int singleNumber(vector<int>& nums) {
      int val = 0;
      for(auto cur : nums)
      {
        val ^= cur;
      }
      return val;
    }
};

那么我们可以从这题里面得出来的,就是同则+,异则-

总结

运算规则:值相同则为0,值不同则为1 

额外拓展:同则加,异则减

左右移运算符(<<和>>)

左移运算符

移位规则:左边抛弃、右边补0

右移运算符 

逻辑右移

移位规则:左边补0,右边丢弃

算术右移

移位规则:左边⽤原该值的符号位填充,右边丢弃

总结:

左移运算符:左边补0,右边丢弃

逻辑右移:左边补0,右边丢弃

算术右移:左边⽤该值的原符号位填充,右边丢弃

单目操作符

逗号表达式

结构体的直接与间接访问操作符

直接访问操作符:.

使用格式:结构体变量.成员名

间接访问操作符:->

#include struct Point

{

int x;

int y;

};

int main()

{

struct Point p = {3, 4};

struct Point *ptr = &p;

ptr->x = 10;

ptr->y = 20;

printf("x = %d y = %d\n", ptr->x, ptr->y);

return 0;

}

使用格式:结构体指针.成员变量名

下标引用操作符

int arr[10];// 创建数组

arr[9] = 10;// 实⽤下标引⽤操作符。

使用格式:⼀个数组名+⼀个索引值

了解即可

本篇文章的内容到此结束了,本篇文章的结束代表着c语言速成系列的结束,但不代表学习的结束,学无止境,未来可期

都看到这里了,客官给个三联呗

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2126379.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络高级(学习)2024.9.10

目录 一、Modbus简介 1.起源 2.特点 3.应用场景 二、Modbus TCP协议 1.特点 2.协议格式 3.MBAP报文头 4.功能码 5.寄存器 &#xff08;1&#xff09;线圈寄存器&#xff0c;类比为开关量&#xff0c;每一个bit都对应一个信号的开关状态。 &#xff08;2&#xff09…

C++——STL——栈(stack)

栈的定义 栈 &#xff08; stack &#xff09;是限定仅在表的一端进行插入和删除操作的线性表&#xff0c;允许插入和删除的一端称 为栈顶&#xff0c;另一端称为栈底&#xff0c;不含任何数据元素的栈称为空栈。 栈的示意图 因为栈只能够在一端进行插入和删除&#xff0c;所以…

【Lua学习】Lua入门

上一篇帖子【Lua学习】Lua最最基础的 – 经云的清净小站 (skycreator.top)讲了Lua是什么&#xff0c;Lua如何安装在Linux和Windows上。那么安装好之后&#xff0c;我们就要使用Lua实现我们的各种功能了。 首先&#xff0c;我们要先了解Lua一些最基本的内容&#xff0c;比如怎么…

杀毒软件 | Malware Hunter v1.189.0.816 绿色版

软件简介 Malware Hunter是由Glarysoft开发的一款专业安全防护软件。该软件的主要目的是保护用户的计算机免受恶意软件、病毒和其他网络威胁的侵害。它通过采用高效的云引擎和小红伞引擎&#xff0c;能够快速且全面地扫描电脑中的恶意软件&#xff0c;并进行强力清除&#xff…

5--SpringBoot、Mybatis

目录 Mybatis Mybatis入门操作步骤 1.准备工作 创建springboot工程 创建数据库表和实体类 连接数据库 创建接口XxxMapper 2.数据库连接池 Lombok 使用 Mybatis 准备工作 删除 日志输入 参数占位符 新增 更新 查询 驼峰命名 条件查询 XML 创建XML文件 编…

关于前端知识中框架概念部分的详细介绍

1、为什么要学习流行框架&#xff1f; 企业&#xff1a;为了提高效率&#xff0c;因为时间就是金钱。开发人员&#xff1a;提高了开发效率发展进程&#xff1a; JS>JQuery>模板引擎>框架时代&#xff08;Angular(2)、React、Vue&#xff09;好处&#xff1a;不用直接…

2.安卓逆向-初识java语言

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a;图灵Python学院 上一个内容&#xff1a;1.安卓逆向-说明 关于java语言的介绍就不写了没啥用直接开始 首先java语言写的代码运行说明 …

kolors文生图框架安装

环境安装 根据Kolors【github】的指引&#xff0c;安装命令如下&#xff1a; apt-get install git-lfs git clone https://github.com/Kwai-Kolors/Kolors cd Kolors conda create --name kolors python3.8 conda activate kolors pip install -r requirements.txt python3 s…

Vue3+TS项目封装SVG图标显示组件vite-plugin-svg-icons插件使用

准备好svg文件 假设从iconfont-阿里巴巴矢量图标库下载了一个svg格式的图标&#xff0c;放在我们项目里&#xff0c;并重命名为ic_money.svg&#xff0c;相对路径为&#xff1a;src\assets\images\icons\ic_money.svg 安装vite-plugin-svg-icons插件 npm install vite-plugi…

常用电路及分析

前言 最近在研究一些简单的硬件知识&#xff0c;把在网上看到的一些常见电路分析总结了一下。 有纰漏请指出&#xff0c;转载请说明。 学习交流请发邮件 1280253714qq.com 串联稳压电路 三极管串联线性稳压电路原理详解及Multisim仿真_三极管稳压电路-CSDN博客 线性稳压电…

Java小白一文讲清Java中集合相关的知识点(八)

HashMap底层机制及源码剖析 HashMap底层维护了Node类型的数组table,默认为null 当创建对象时&#xff0c;将加载因子初始化为0.75&#xff1b; 当添加key-value时&#xff0c;通过key的哈希值得到在table的索引&#xff0c;然后判断该索引处是否有元素&#xff0c;如果没有元…

力扣 — — 2555. 两个线段获得的最多奖品

力扣 — — 2555. 两个线段获得的最多奖品 一、题目描述 题目大意&#xff1a;给定一个数组prizePositions&#xff0c;数组中的值表示的是奖品的位置&#xff0c;每一个位置可以有多个奖品&#xff0c;并且设定一个线段的长度 K K K&#xff0c;要求从所有奖品位置中选择两个…

修改Netty 中EventLoopGroup的线程名字前缀

此方案针对 netty 4 , 阅读Netty 源码的过程中涉及到多种线程跳转&#xff0c;2-1 3-1 4-1 类似的命名头晕眼花&#xff0c;直接改了成方便辨认的名字吧&#xff01; 代码如下&#xff1a; public static EventLoopGroup getEventLoopGroup(String name, int nThread) {Defaul…

第十一周:机器学习

第十一周周报 摘要Abstract机器学习1. 注意力机制&#xff08;下&#xff09;1.1 multi-head self-attention&#xff08;多头注意力机制&#xff09;1.2 Positional Encoding&#xff08;位置编码&#xff09;1.3 truncated self attention&#xff08;截断式注意力机制&#…

SVGJS使用

svgjs用于操作 SVG 和动画的轻量级库。 官网 SVG.js v3.2 |家 (svgjs.dev) 1、安装 npm install svgdotjs/svg.js 或者下载直接引用 2、使用 <script src"https://cdn.jsdelivr.net/npm/svgdotjs/svg.js3.0/dist/svg.min.js"></script> import { S…

Win11 22H2/23H2用户速来!9月更新补丁KB5043076已发布

系统之家于9月11日发出最新报道&#xff0c;微软针对Win11用户发布了9月最新的更新补丁KB5043076&#xff0c;22H2用户升级系统后&#xff0c;版本号升至22621.4169&#xff0c;23H2用户的系统版本也升至22631.4169。此次更新支持用户从Windows分享窗口将内容共享到安卓设备。以…

95. UE5 GAS RPG 实现创建多段飞弹攻击敌人

从这篇开始&#xff0c;我们将实现一些技能&#xff0c;比如多段火球术&#xff0c;闪电链等等。 在这一篇里&#xff0c;我们先实现多段火球术&#xff0c;技能可以通过配置发射出多个火球术进行攻击。 创建多段火球函数 首先在我们之前创建的RPGFireBolt.h类里面增加一个生…

k8s的环境配置

一、前期系统环境准备 准备3台主机&#xff1a;硬盘50G cpu2个 内存2G 1、3台主机同时配置 1&#xff09;关闭防火墙与selinux、NetworkManager [rootk8s-master ~]# systemctl stop firewalld[rootk8s-master ~]# systemctl disable firewalldRemoved symlink /etc/systemd/…

ctfshow-web入门-sql注入-web248-UDF 注入

udf 全称为&#xff1a;user defined function&#xff0c;意为用户自定义函数&#xff1b;用户可以添加自定义的新函数到 Mysql 中&#xff0c;以达到功能的扩充&#xff0c;调用方式与一般系统自带的函数相同&#xff0c;例如 contact()&#xff0c;user()&#xff0c;versio…

VUE实现刻度尺进度条

一、如下图所示效果: 运行后入下图所示效果: 实现原理是用div画图并动态改变进度, 二、div源码 <div style="width: 100%;"><div class="sdg_title" style="height: 35px;"><!--对话组[{{ dialogGroup.index }}]编辑-->&…