打印
[软件资料]

位运算符

[复制链接]
235|10
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
forgot|  楼主 | 2025-3-24 17:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
C 语言位操作符包括按位与(&)、按位或(|)、按位异或(^)、按位取反(~)、左移(<<)和右移(>>)。  
按位与(&)
只有当两个二进制位都为 1 时,它才会给出 1 的裁决,否则就是 0。例如,对 5(二进制表示为 0000 0101)和 3(二进制表示为 0000 0011)进行按位与操作时,0000 0101 & 0000 0011 = 0000 0001,结果为 1。按位与操作常常用于清零特定位或者提取指定位的数据。

按位或(|)
只要两个二进制位中有一个为 1,它就会给予 1 的馈赠,只有当两个位都为 0 时,才会给出 0。比如,5 | 3,0000 0101 | 0000 0011 = 0000 0111,结果为 7。按位或操作常用于将特定位设置为 1。

按位异或(^)
当两个二进制位不同时,它会创造出 1 的独特效果,而当两个位相同时,结果为 0。以 5 ^ 3 为例,0000 0101 ^ 0000 0011 = 0000 0110,结果是 6。按位异或操作在数据加密、校验和数据交换等场景中应用较多。


按位取反(~)
将二进制位中的 0 变成 1,1 变成 0。对于 5(0000 0101),~5 的结果是 1111 1010,由于计算机中数据以补码形式存储,这里的结果是一个负数,其原码为 1000 0110,对应的十进制值为 -6。


左移(<<)
将二进制位向左移动指定的位数,右边空出的位用 0 填充。例如,5 << 2,0000 0101 << 2 = 0001 0100,结果为 20。左移操作相当于对原数乘以 2 的移动位数次方,是一种高效的乘法运算方式。


右移(>>)
则是将二进制位向右移动指定的位数。对于无符号数,左边空出的位用 0 填充;对于有符号数,若为正数,左边用 0 填充,若为负数,左边用符号位(即 1)填充。例如,5 >> 1,0000 0101 >> 1 = 0000 0010,结果为 2;而 -5 >> 1,1111 1011 >> 1 = 1111 1101,结果为 -3(这里以补码形式表示,原码为 1000 0011)。右移操作相当于对原数除以 2 的移动位数次方,是一种高效的除法运算方式。   

使用特权

评论回复
沙发
xiaoqizi| | 2025-5-9 18:31 | 只看该作者
C语言中的位运算符是直接对整数的二进制位进行操作的运算符

使用特权

评论回复
板凳
木木guainv| | 2025-5-9 20:18 | 只看该作者
按位与将两个操作数的每一位进行与操作。只有当两个相应的二进制位都为1时,该位的结果才为1,否则为0

使用特权

评论回复
地板
Jiangxiaopi| | 2025-5-9 21:59 | 只看该作者
按位与可用于清零、取一个数中某些指定位、保留指定位等

使用特权

评论回复
5
荣陶陶| | 2025-5-10 07:24 | 只看该作者
按位或将两个操作数的每一位进行或操作。只要两个相应的二进制位中有一个为1,该位的结果就为1,否则为0

使用特权

评论回复
6
Zhiniaocun| | 2025-5-10 09:07 | 只看该作者
按位异或:
int a = 60;  // 60的二进制表示是0011 1100
int b = 13;  // 13的二进制表示是0000 1101
int c = a ^ b;  // 结果是0011 0001,即49


使用特权

评论回复
7
Zuocidian| | 2025-5-10 10:50 | 只看该作者
下面代买实现了按位取反:
int a = 60;  // 60的二进制表示是0011 1100
int b = ~a;  // 结果是 -61,二进制表示(补码)是1100 0011


使用特权

评论回复
8
Puchou| | 2025-5-10 12:55 | 只看该作者
左移操作:将左操作数的二进制位向左移动若干位,右侧空出的位用0填充,高位移出的部分被丢弃

使用特权

评论回复
9
Xiashiqi| | 2025-5-10 14:46 | 只看该作者
右移代码:
int a = 10;  // 10的二进制表示是0000 1010
int b = a >> 1;  // 结果是5,二进制表示是0000 0101


使用特权

评论回复
10
小海师| | 2025-5-10 16:39 | 只看该作者
右移的时候,对于有符号数,高位补符号位;对于无符号数,高位补0

使用特权

评论回复
11
Haizangwang| | 2025-5-10 18:22 | 只看该作者
按位异或可用于交换两个变量的值而不用临时变量

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

1954

主题

14028

帖子

58

粉丝