本帖最后由 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
注:
|