黑马程序员技术交流社区
标题: 位运算 [打印本页]
作者: WPeng 时间: 2015-8-7 22:41
标题: 位运算
本帖最后由 WPeng 于 2015-8-8 00:06 编辑
位运算
1)位运算是直接对整数在内存中的二进制位进行操作的方法(只能操作整型数据)。效率高
2)&与运算
(1)对应两个二进制位都为1时结果才为1,否则为0(有假为假);
2&3
00000000 00000000 00000000 00000010
& 00000000 00000000 00000000 00000011
00000000 00000000 00000000 00000010
结果为2
3)|或运算
(1)对应两个二进制位有一个为1时结果才为1,否则为0(有真为真);
2|3
00000000 00000000 00000000 00000010
| 00000000 00000000 00000000 00000011
00000000 00000000 00000000 00000011
结果为3
4)^异或运算
(1)对应的二进制位不同时为1,否则为0.(不同为真==1,相同为假==0)
(2)相同整数^运算的结果是0.
(3)一个数^另一个数两次结果不变
(4)整数相互^跟顺序无关。
2^3
00000000 00000000 00000000 00000010
^ 00000000 00000000 00000000 00000011
00000000 00000000 00000000 00000001
结果为1
5)~取反运算
(1)对整数的各个二进制位取反,包括富豪为(0变1,1变0,真假互换)。
~2
~ 00000000 00000000 00000000 00000010
11111111 11111111 11111111 11111101 -- -3 补码
10000000 00000000 00000000 00000011 -- -3 原码
11111111 11111111 11111111 11111100 -- -3 反码
(2)取反运算是单目操作符
(3)计算机中:原码=补码=反码(不是表现形式相等,而是真是的值相等)
(4)正数的补码,反码,原码的表现形式都是一样的。
(5)负数的补码=反码+1;反码=原码符号位不变其余取反。
(6)取反==原数的反值-1;例如:2:-1-1=-3;-3:3-1=2
6)<<左移
(1)把整数的各个二进制位全部左移N位,高位丢弃(包括符号位),低位补0;
3<<1
0000 0000 0000 0000 0000 0000 0000 0011
<<1 0000 0000 0000 0000 0000 0000 0000 0110 6
3<<1 -->6 -->3*2的1次方
3<<2 -->12 -->3*2的2次方
3<<3 -->24 -->3*2的3次方
注:此方法使用要求,符号位不变。
7)>>右移
(1)把整数的各个二进制位全部右移N位,符号位不变,高位的空缺是正数补0;
3>>1
0000 0000 0000 0000 0000 0000 0000 0011
>>1 0000 0000 0000 0000 0000 0000 0000 0001 1
3>>2
0000 0000 0000 0000 0000 0000 0000 0011
>>2 0000 0000 0000 0000 0000 0000 0000 0000 0
3>>1 --->1 3/2的1次方=1
3>>2 --->2 3/2的2次方=0
注:
作者: 颜少 时间: 2015-8-7 22:48
总结的很好,借用一下,多谢
作者: ℃葫芦 时间: 2015-8-7 23:02
| 运算里的2|3 你写成了 2&3
另外取反运算是怎么算的啊。
作者: 要踏实小伙子 时间: 2015-8-7 23:07
取反也就是符号位除外 其他1变0 0变1
这里也就是注意符号位不变
然后就是注意正数 原码=反码=补码
作者: 谭威威威威 时间: 2015-8-7 23:18



作者: WPeng 时间: 2015-8-8 00:04
收到,我改改
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |