打印
[软件资料]

位运算符

[复制链接]
21|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
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 的移动位数次方,是一种高效的除法运算方式。   

使用特权

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

本版积分规则

1878

主题

13751

帖子

57

粉丝