或运算符(|)
有1则为1
-2|-6
10000000 00000000 00000000 00000010 -反码-》11111111 11111111 11111111 11111101 --进行补码: 11111111 11111111 11111111 11111110
10000000 00000000 00000000 00000110 -反码-》11111111 11111111 11111111 11111001 --进行补码: 11111111 11111111 11111111 11111010
||
||
11111111 11111111 11111111 11111110 | 11111111 11111111 11111111 11111010
= 11111111 11111111 11111111 11111110 --补码(-1)-》11111111 11111111 11111111 11111101 --反码-》10000000 00000000 00000000 00000010
= 2
与运算符(&)
有0则为0
2&-6
00000000 00000000 00000000 00000010 (原反补相同)
10000000 00000000 00000000 00000110 -反码-》11111111 11111111 11111111 11111001 --进行补码: 11111111 11111111 11111111 11111010
||
||
00000000 00000000 00000000 00000010
&
11111111 11111111 11111111 11111010
= 00000000 00000000 00000000 00000010 (因为是第一位是0是正数,正数原反补相同) = 2
-2&-6
10000000 00000000 00000000 00000010 -反码-》11111111 11111111 11111111 11111101 --进行补码: 11111111 11111111 11111111 11111110
&
10000000 00000000 00000000 00000110 -反码-》11111111 11111111 11111111 11111001 --进行补码: 11111111 11111111 11111111 11111010
||
||
11111111 11111111 11111111 11111110
&
11111111 11111111 11111111 11111010
= 11111111 11111111 11111111 11111010 --补码(-1)-》11111111 11111111 11111111 11111001 --反码(-1)-》00000000 00000000 00000000 00000110
= 6
位移运算
-2 << 1:
10000000 00000000 00000000 00000010(-2) ——反码-—》 11111111 11111111 11111111 11111101 --补码--》11111111 11111111 11111111 11111110
--左移1位-》11111111 11111111 11111111 11111100 -补码(-1)-》 11111111 11111111 11111111 11111011 -反码(不改变符号位)-》 10000000 00000000 00000000 00000100
= -4
-2 >>> 1:
10000000 00000000 00000000 00000010(-2) ——反码()-—》11111111 11111111 11111111 11111101 --补码--》11111111 11111111 11111111 11111110
--右移1位-》01111111 11111111 11111111 11111111 右移后变成了正数(第一个数是0),正数的原码,反码,补码都相同
=01111111 11111111 11111111 11111111
=2147483647
异或运算
相同为0,相异为1
-2^-6 :
10000000 00000000 00000000 00000010 -反码-》11111111 11111111 11111111 11111101 --进行补码: 11111111 11111111 11111111 11111110
^
10000000 00000000 00000000 00000110 -反码-》11111111 11111111 11111111 11111001 --进行补码: 11111111 11111111 11111111 11111010
||
||
11111111 11111111 11111111 11111110 ^ 11111111 11111111 11111111 11111010
= 00000000 00000000 00000000 00000100
= 4
非运算符
1变0,0变1
~-2 :
10000000 00000000 00000000 00000010 -反码-》11111111 11111111 11111111 11111101 --进行补码(+1): 11111111 11111111 11111111 11111110
~运算后: 00000000 00000000 00000000 00000001 (正数原反补相同)
=1
~2 :
00000000 00000000 00000000 00000010
~运算后: 11111111 11111111 11111111 11111101 --进行补码(-1): 11111111 11111111 11111111 11111100 -反码-》10000000 00000000 00000000 00000011
=-3
总结:反码和补码是不改变正负标记位的,运算改变正负标记位的
结语
文章有不对的地方欢迎指出,共同进步!