位运算是针对二进制的运算
& 按位与 &&逻辑与 | 按位或 ||逻辑或 ^ 按位异或
<< 左移 >> 右移 ~ 取反
1. & 按位与 特点:只有对应的两位都是1返回1 否则返回0 口诀:一假则假 int result = 9 & 5; printf("result = %d\n", result);
1001 & 0101 ----------- 0001
2.| 按位或 特点:只要对应的两位,其中一位是1就反回1 口诀:一真则真
int result = 9 | 5; printf("result = %d\n", result); 1001 | 0101 ----------- 1101
3. ^ 按位异或 特点:对应的两位不相同就反回1,相同就返回0(相同为0,不同为1) int result = 9 ^ 5; printf("result = %d\n", result);
1001 ^ 0101 ----------- 1100
按位异或规律 3.2相同的整数按位异或的结果是0 int result3 = 9 ^ 9; 1001 ^1001 ---------- 0000 3.3任何整数按位异或上0,结果不变,还是本身 int result4 = 9 ^ 0; 1001 ^0000 ------- 1001
3.4任何整数按位异或上另一个整数两次,结果还是本身 第四个规律,可以通过2,3推理出来 int result5 = 9 ^ 5 ^ 9; 1001 ^ 0101 ----------- 1100
1100 ^1001 ------- 0101 4. ~ 按位取反 : 特点:0变1,1变0 5. << 左移 a << n 把整数a的二进制位往左移动n位 (a*2^n) 特点:整体移动n后,多出来的位,直接砍掉,少的位数补0(高位砍掉,低位补0) 注意:左移的时候,有可能改变数值的正负性 左移的使用场景:当要计算某个数字乘以2的n次方的时候,用左移,效率最高 6. >> 右移 a >> n 把整数a的二进制位往右移动n位 符号位不变 注意点:移除的位砍掉,缺少的一位,最高位是0就补0,是1就补1(当前操作系统下) 右移的使用场景:当要计算某一个数除以2的N次方的时候,可以使用右移,效率最高 int result8 = 9 >> 3; printf("result = %d\n", result8);
|