提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
目录
一、位操作符是什么?
C语言中的位操作符是用于对二进制位进行操作的运算符。它们用于按位比较、移位和逻辑运算。
二、位操作符的类型
2.1. 按位与(&)
将两个操作数的每一个二进制位进行逻辑与运算,如果二进制位都为1,则结果为1,否则结果为0。常用于掩码操作,例如将某些二进制位置为0,将其他二进制位保留。
简单来说就是:有0就为0,同1就为1
下面举个简单的例子:
12&4(这里的数据为int类型,4字节大小)
12的补码 00000000000000000000000000001100
4的补码 00000000000000000000000000000100
12&4 00000000000000000000000000000100
2.2. 按位或(|)
将两个操作数的每一个二进制位进行逻辑或运算,如果二进制位中有一个为1,则结果为1,否则结果为0。常用于设置或清除某些二进制位。
简单来说就是:有1就为1,同0就为0
例子如下:
12的补码 00000000000000000000000000001100
4的补码 00000000000000000000000000000100
12|4 00000000000000000000000000001100
2.3. 按位异或(^)
将两个操作数的每一个二进制位进行逻辑异或运算,如果二进制位相同,则结果为0,否则结果为1。常用于编码和解码数据,或者进行加密操作。
简单来说就是:同0异1
例子:
12的补码 00000000000000000000000000001100
4的补码 00000000000000000000000000000100
12^4 00000000000000000000000000001000
2.4. 按位取反(~)
将操作数的每一个二进制位进行取反操作,即0变为1,1变为0。常用于位运算中,例如生成掩码和反码。
简单来说:对补码每一位进行取反操作(包括符号位)
例子:
-12的补码 10000000000000000000000000001100
~-12 011111111111111111111111111111110011
2.5. 左移操作符(<<)
将操作数的二进制位向左移动指定的位数,右侧空白位填充0。常用于乘以2的幂次方,例如将一个无符号整数左移n位相当于将其乘以2的n次方。
2.6. 右移操作符(>>)
将操作数的二进制位向右移动指定的位数,左侧空白位填充符号位。常用于除以2的幂次方,例如将一个带符号整数右移n位相当于将其除以2的n次方。
移位规则:⾸先右移运算分两种: 1. 逻辑右移:左边⽤0填充,右边丢弃
2. 算术右移:左边⽤原该值的符号位填充,右边丢弃
PS:在现在大部分编译器上(如VS等),使用的都是算术右移 ,但仍有小部分编译器使用逻辑右移,可以在您的编译器上编写代码查看
三、总结
以上是C语言中常见的位操作符及其基本概念和使用场景。在编写位运算相关的程序时,开发人员需要注意数据类型和操作数的正负性,以避免产生不正确的结果。