『教程』补码怎么来的?
1.首先需要知道负数的二进制怎么来的
将减去一个数变为加上这个数的负数
通过结果反推这个负数的二进制是多少
多组数据对比,得出:
- 先把十进制的负数取绝对值,
- 转为二进制 然后按位取反,
- 最后加 1 。
这就是十进制负数的二进制写法了,这就叫做补码。
对于正数和0,源码和补码是一样的
2. 为什么数据溢出会变成负数?
计算机中一个8位最多存储256个数字
不足的前面位数由0补全
- 这个8位由两部分组成,第一个数是最高位(0为正,1为负)和其余部分组成(实际数据)
0 | 0 | 0 | 0 | 1 | 0 | 1 | 1 | = | 11 |
---|---|---|---|---|---|---|---|---|---|
最高位 | 补码 | 补码 | 补码 | 8 | 4 | 2 | 1 | = | 8+0+2+1=11 |
下面是8位数最高值127:
- 最高值127+1,就会让最高位的正负数标记进一位变为1,也就成了负,变为1000 0000 1000 0000
- 既然是负数,那就通过补码的由来进行反推就能得出他的的十进制的数字
- 先减1,得到 0111 1111
- 按位取反,得到 1000 0000
- 他的十进制的绝对值就是 128 取负数,得到 -128
结束