二进制
-
二进制的最高位是符号位:0表示正数; 1表示负数
-
正数的原码、反码、补码都一样
-
负数的反码=它的原码符号位不变,其它位取反
-
负数的补码=它的反码+1
-
0的反码、补码都为0
1:原码[0000 0001] 反码[0000 0001] 补码[0000 0001]
-1: 原码[1000 0001] 反码[1111 1110] 补码[1111 1111]
位运算
用补码进行计算
-
按位与 &:两位全为1,结果为1
2&3 0000 0010 2 补码 0000 0011 3 补码 0000 0010 2
-
按位或 |:两位有一个为1,结果为1
2|3 0000 0010 2 补码 0000 0011 3 补码 0000 0011 3
-
按位异或 ^:一位为1,一位为0,结果为1
2^3 0000 0010 2 补码 0000 0011 3 补码 0000 0001 1
-
按位取反 ~:0->1 1->0
移位运算
-
算数右移 >>:低位溢出,符号位不变,并用符号位补溢出的高位
1 >>> 2 1右移2位 1[0000 0001] => [0000 0000]0
-
算数左移 <<:符号位不变,低位补0
逻辑右移 >>>:低位溢出,高位补0