有符号数的三种8位编码方式,其中二进制整数最终都是以补码的形式出现的。
正数/负数 | 原码 | 反码 | 补码 |
---|---|---|---|
1 | 0000 0001 | 0000 0001 | 0000 0001 |
-1 | 1000 0001 | 1111 1110 | 1111 1111 |
2 | 0000 0010 | 0000 0010 | 0000 0010 |
-2 | 1000 0010 | 1111 1101 | 1111 1110 |
+0 | 0000 0000 | 0000 0000 | 0000 0000 |
-0 | 1000 0000 | 1111 1111 | 0000 0000 |
-128 | 无法表示 | 无法表示 | 1000 0000 |
带符号移位运算(正数左右移都是补0,负数左移补0右移补1)
正数/负数 | 向左移 << 1位 | 向右移 >> 1 |
---|---|---|
正数(35的补码00100011) | 01000110 = 70 | 00010001 = 17 |
负数(-35的补码11011101) | 10111010 = -70 | 11101110 = -18 |
正数(99的补码01100011) | 11000110 = -58(正变负) | 00110001 = 49 |
负数(-99的补码10011101) | 00111010 = 58(负变正) | 11001110 = -50 |
无符号移位运算(只存在无符号右移,高位补0,且符号位失去作用)
正数/负数 | 向右移 >>> 1位 | 向右移 >>> 2 位 | 向右移 >>> 3 位 |
---|---|---|---|
正数(35的补码00100011) | 00010001 = 17 | 00001000 = 8 | 0000100 = 4 |
负数(-35的补码11011101) | 01101110 = 110 | 00110111 = 55 | 00011011 = 27 |