用八位的二进制来表示,-128补码是10000000
那为什么是10000000呢???
用8位的二进制来表示一个数,它的范围是-128~127
我们按照书本求补码是这样的:原码->反码->补码
现在问题来了,8位2进制数的源码范围只能到达127,那-128的补码是怎么得来的呢???
参考知乎@Simon Cao的答案:
https://www.zhihu.com/question/20458542
总结:
- 负数的表达方式就是它绝对值的补数
- 在8位二进制数中,0-127表示正数,128-255表示负数
参考映射表:
+----------------------------+
| 255 -1 11111111 |
| 254 -2 11111110 |
| 253 -3 11111101 |
| 252 -4 11111100 |
| 251 -5 11111011 |
| 246 -10 11110110 |
| 236 -20 11101100 |
| 226 -30 11100010 |
| 216 -40 11011000 |
| 206 -50 11001110 |
| 196 -60 11000100 |
| 186 -70 10111010 |
| 156 -100 10011100 |
| 129 -127 10000001 |
| 128 -128 10000000 |
| 127 127 01111111 |
| 100 100 01100100 |
| 70 70 01000110 |
| 60 60 00111100 |
| 50 50 00110010 |
| 40 40 00101000 |
| 30 30 00011110 |
| 20 20 00010100 |
| 10 10 00001010 |
| 5 5 00000101 |
| 4 4 00000100 |
| 3 3 00000011 |
| 2 2 00000010 |
| 1 1 00000001 |
| 0 0 00000000 |
+----------------------------+
8位二进制数的模是256
参考表来看的话:
- 0-127的数都是正数,可以直接表示。
- 当我要求-1补码时(8位2进制数),我可以这样求:256-1=255,255的二进制数是11111111