浅谈计算机中的二进制补码
对于一个整数, 计算机里面是以补码的形式存储的, 我们如果想要理解补码, 需要先理解原码和反码
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
来源: http://www.bubuko.com/infodetail-2489520.html