对于一个整数,计算机里面是以补码的形式存储的,我们如果想要理解补码,需要先理解原码和反码。
1)原码
正整数的原码就是它的二进制形式
10的原码: 0000 1010
负整数的原码,使用最高位为1 表示符号为负数
-10 的原码 1000 1010
2)反码
正整数的反码与原码一样
10的反码: 0000 1010
负整数的反码。符号位不变,其余按位取反(0变1. 1变0)
-10 的反码 1111 0101
3)补码
`正整数的补码与原码一样
10的补码: 0000 1010
负整数的补码是它的反码加1
-10的补码: 1111 0110
对于整数10来说。如果采用1个字节保存它。在计算机中存储的01序列为: 0000 1010
对于整数-10来说,如果采用1个字节保存它,在计算机中存储的01序列为: 1111 0110
使用补码进行运算时准确的,使用原码和反码不准确
(类似小学加法,满2进1)
使用原码计算10-10的结果
10的原码: 0000 1010
-10的原码: 1000 1010
结果 1001 0100 =-20
使用反码计算10-10的结果
10的反码 0000 1010
-10的反码 1111 0101
结果 1111 1111(反码) --- 10000 0000(原码) == -0 负整数的反码。符号位不变,其余按位取反(0变1. 1变0)
使用补码计算10-10的结果
10的补码: 0000 1010
-10 的补码: 1111 0110
结果 1 0000 0000
使用一个字节保存: 最高位1就没地方保存,舍弃,只剩下 0000 0000
如果使用两个字节存储 还会产生最高位1存储不下,因此补码计算的结果是准确的。
(补充)一个字节最大的整数 0111 1111 127
一个字节最小的负数 1000 0000 -128