1、提出问题
用八位的二进制来表示,-128补码是1000 0000
,那为什么是1000 0000
呢???
用8位的二进制来表示一个数,它的范围是-128~127,按照书本求补码是这样的:原码 → 反码 → 补码
现在问题来了:8位2进制数的源码范围只能到达127,那-128的补码是怎么得来的呢???
2、解决问题
参考文章:在8位二进制中,-128 没有原码、反码形式,那么它的补码是怎么计算出来的?还是约定的?
参考映射表:
+----------------------------+
| 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的二进制数是1111 1111
3、总结
-
负数的表达方式就是它绝对值的补数
-
在8位二进制数中,0-127表示正数,128-255表示负数
大佬的肩膀
在8位二进制中,-128 没有原码、反码形式,那么它的补码是怎么计算出来的?还是约定的?
物竞天择,适者生存,加油吧 !!!