补码(two's complement,二的补码)是现代计算机表示有符号整数的标准方式。下面重点说明还原规则。
补码怎样读回原值
最高位为 0:按正数读;为 1:无符号值减 2^w,得到负数。
- 看内存或十六进制时,最高位为 1 的值要用补码规则还原,不能当原码读
- 有符号右移与无符号右移结果不同
示例
输入:1
补码结果:8 位补码 00000001(十进制校验:1)
说明:正数补码等于原码;负数补码等于反码加 1,8 位补码可表示 -128。
怎么选
实际开发一律按补码理解和计算;教材中的原码、反码只用于对照原理。
补码与原码、反码的关键差别是“只有一个零”和“可以直接做加减法”。-1 在补码中是全 1,在原码中是 10000001。补码还能表示比原码多一个负数(8 位的 -128)。
Go 示例
下面是 Go 中处理补码的常用写法:
n := int8(-42)
fmt.Sprintf("%08b", uint8(n)) // 11010110运行前确认输入的字符集(推荐 UTF-8),结果可以用本站工具交叉核对。
本站的进制转换工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。
常见问题
【如何把补码转回十进制?】最高位为 0 按正数读;为 1 时,无符号值减去 2^w。11010110=214,214-256=-42。
【-1 的 8 位补码是什么?】11111111。这是最常见的记忆点:全 1 就是 -1。
【8 位补码能表示 -128 吗?】能,编码是 10000000。它没有对应的正数 +128。
文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。