按位运算
按位运算是对二进制数的每一位进行逻辑操作的一种运算。常见的按位运算有按位与(&)、按位或(|)、按位异或(^)、按位取反(~)等。
1. 按位与(&):
对两个二进制数的对应位进行与运算,只有在两个二进制数对应位都为1时,结果的对应位才为1,否则为0。
示例:
5 (二进制: 101)
& 3 (二进制: 011)
--------
1 (二进制: 001)
2. 按位或(|):
对两个二进制数的对应位进行或运算,只要两个二进制数对应位中有一个为1,结果的对应位就为1。
示例:
5 (二进制: 101)
| 3 (二进制: 011)
--------
7 (二进制: 111)
3. 按位异或(^):
对两个二进制数的对应位进行异或运算,只有两个二进制数对应位不同,结果的对应位才为1,否则为0。
示例:
5 (二进制: 101)
^ 3 (二进制: 011)
--------
6 (二进制: 110)
4. 按位取反(~):
对一个二进制数的每一位取反,0变成1,1变成0。
示例:
~5 (二进制: 101) = -6 (二进制: 110)
这些按位运算在计算机领域非常常用,尤其在底层编程、图像处理、加密解密等领域。
移位操作
在C语言中,移位运算符有双目移位运算符:<<(左移)和>>(右移)。
左移运算是将一个二进制位的操作数按指定移动的位数向左移动,移出位被丢弃,右边移出的空位一律补0。
右移运算是将一个二进制位的操作数按指定移动的位数向右移动,移出位被丢弃,左边移出的空位一律补0,或者补符号位,这由不同的机器而定。在使用补码作为机器数的机器中,正数的符号位为 0 ,负数的符号位为 1 。
具体转化为10进制数为多少看:移位操作