2010年2月15日星期一

[转]二进制最简单的运算过程解析

转自:http://www.blogjava.net/lzhidj/archive/2010/01/29/311248.html


3 & 4

&:同为1结果为1,否则为0
0000 0000 0000 0000 0000 0000 0000 0011
0000 0000 0000 0000 0000 0000 0000 0100
---------------------------------------
0000 0000 0000 0000 0000 0000 0000 0000 -> 0

4 | 8
|: 一方为1结果便为1,否则为0
0000 0000 0000 0000 0000 0000 0000 0100
0000 0000 0000 0000 0000 0000 0000 1000
---------------------------------------
0000 0000 0000 0000 0000 0000 0000 1100 -> 12


~9
~:取反,0变成1,1变成0 ->要得到最后结果必须再计算补码(反码+1)
0000 0000 0000 0000 0000 0000 0000 1001
---------------------------------------
1111 1111 1111 1111 1111 1111 1111 0110 ->得到反码,下面回算补码(即减1取反)
---------------------------------------
1111 1111 1111 1111 1111 1111 1111 0101 ->-1
---------------------------------------
0000 0000 0000 0000 0000 0000 0000 1010 ->取反结果为10,取反码的时候以1开头,即为负数,所以结果为-10

下面是-10在java中的表示:
0000 0000 0000 0000 0000 0000 0000 1010
1111 1111 1111 1111 1111 1111 1111 0101 +1
1111 1111 1111 1111 1111 1111 1111 0110

8 ^ 23
^:异或, 不同为1,相同为0
0000 0000 0000 0000 0000 0000 0000 1000
0000 0000 0000 0000 0000 0000 0001 0111
---------------------------------------
0000 0000 0000 0000 0000 0000 0001 1111 -> 31

4 << 3
<<:左位移,4的二进制向左移动3位,右边补0
0000 0000 0000 0000 0000 0000 0000 0100
---------------------------------------
0000 0000 0000 0000 0000 0000 0010 0000 -> 32

5 >> 9
>>:右位移, 5的二进制向右移动9位,左边补0
0000 0000 0000 0000 0000 0000 0000 0101
---------------------------------------
0000 0000 0000 0000 0000 0000 0000 0000 -> 0

没有评论: