位运算符

原码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值。

1
2
3
[+1]原 = 0000 0001

[-1]原 = 1000 0001

反码

正数的反码是其本身;负数的反码是在其原码的基础上, 符号位不变,其余各个位取反。

1
2
3
[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

补码

正数的补码就是其本身;负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1。(即在反码的基础上+1)

1
2
3
[+1] = [00000001]原 = [00000001]反 = [00000001]补

[-1] = [10000001]原 = [11111110]反 = [11111111]补

&与运算

3 & 5 = 1

1
2
3
3 00000011
5 00000101
1 00000001

|或运算

3 | 5 = 7

1
2
3
3 00000011 
5 00000101
7 00000111

~非运算

~ 3 = -4

1
2
3
4
3  00000011
-4 11111100 补
-4 11111011 反
-4 10000100 原

~ -4 = 3

1
2
3
4
-4 10000100 原
-4 11111011 反
-4 11111100 补
3 00000011

^异或运算

3 ^ 5 = 6

1
2
3
3 00000011
5 00000101
6 00000110

<<左移

不分正负数,低位补0。

>>右移

如果该数为正,则高位补0,若为负数,则高位补1。

参考