黑马程序员技术交流社区
标题: 关于位运算符 [打印本页]
作者: 小年轻不见了 时间: 2015-6-23 21:33
标题: 关于位运算符
位运算是针对二进制的运算
& 按位与 &&逻辑与
| 按位或 ||逻辑或
^ 按位异或
<< 左移
>> 右移
~ 取反
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);
作者: 沙睿 时间: 2015-6-23 21:55
同学,你是在水经验吗
| 欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |