规则
- 二进制的最高位(最左边的)是符号位:0-正数,1-负数
- 正数的原码、反码、补码都一样
- 负数的反码 = 原码符号位不变,其他位取反
- 负数的补码 = 它的反码 + 1,负数的反码 = 负数的补码 - 1
- 0的反码、补码都是0
- Java中的数都是有符号的
- 计算机运算的时候,都是以补码的方式来运算的
- 当我们查看运算结果的时候,要看它的原码
位运算符
- &: 两位全为1,结果为1,否则为0
- |
- ^:一个为0,一个为1,结果为1,否则为0
- ~
- >>算数右移
- <<算数左移
- >>>无符号右移
!!!在计算过程中都是按照其补码来运算的
eg:
-
2 & 3
2的补码:00000000 00000000 00000000 00000010
3的补码:00000000 00000000 00000000 00000011
计算后得到的补码:00000000 00000000 00000000 00000010
原码:00000000 00000000 00000000 00000010
结果是 :2 -
~ -2
-2的原码:10000000 00000000 00000000 00000010
-2的反码:111111111 111111111 111111111 111111101
-2的补码:111111111 111111111 111111111 111111110
计算后得到的补码:00000000 00000000 00000000 00000001,运算后得到正数
计算后得到的原码:00000000 00000000 00000000 00000001
结果是:1 -
~2
2的原码:00000000 00000000 00000000 00000010
2的补码:00000000 00000000 00000000 00000010
计算后得到的补码:11111111 11111111 11111111 11111101,是负数
结果的反码:11111111 11111111 11111111 11111100
结果的原码:10000000 00000000 00000000 00000011
结果:-3
>>算术右移
eg:1>>2,相当于1/2 /2
1 => 00000001,经过>>2,得到00000000,得到0
<<算数左移
eg:1<<2,相当于1*2*2
1 => 00000001,经过<<2,得到00000100,得到4
eg:4 << 3
4 => 00000100,经过<<3,得到00100000,得到32
>>>逻辑右移,也叫做无符号右移
!!!没有<<<符号