补码如何批量得到结果

78 0

补码(two's complement,二的补码)是现代计算机表示有符号整数的标准方式。下面重点说明生成方法。

补码如何批量得到结果

生成补码:正数直接写二进制;负数用 2^w-|n|,或对绝对值取反加 1。语言中通常直接写整数字面量,由编译器按补码存储。

n = -42
print(format(n & 0xFF, "08b"))      # 8 位补码 11010110
print(int("11010110", 2) - 256)  # 回到 -42(最高位为 1 时减 256)

示例

输入:8

补码结果:8 位补码 00001000(十进制校验:8)

说明:正数补码等于原码;负数补码等于反码加 1,8 位补码可表示 -128。

注意事项

  • 看内存或十六进制时,最高位为 1 的值要用补码规则还原,不能当原码读
  • 有符号右移与无符号右移结果不同
  • 整数溢出在 C 等语言中可能是未定义行为或静默回绕
  • Python 的 int 不回绕,要用模运算或 ctypes/c_int8 才能模拟固定位宽

命令行示例

# 查看 -42 的 8 位补码
python3 -c "print(format((-42) & 0xFF, '08b'))"
# 从补码还原
python3 -c "x=0b11010110; print(x-256 if x>=128 else x)"

本站的进制转换工具可以直接处理,计算在浏览器本地完成,适合快速核对结果。

常见问题

【为什么 11111111 是 -1 不是 -127?】按补码还原:取反得 00000000,加 1 得 1,再加负号为 -1。读成原码才会得到 -127。

【Java 的 byte 范围为什么是 -128~127?】byte 是 8 位补码,正好是这个范围。

【如何把补码转回十进制?】最高位为 0 按正数读;为 1 时,无符号值减去 2^w。11010110=214,214-256=-42。

文中示例可以在本站对应工具中验证;处理密钥、证书等敏感数据时,请注意保护隐私。

署名:123问编辑部 · 最近修订:2026-11-11 · 已按编辑与审核说明检查;内容仅供参考,不构成医疗、法律或投资建议。发现错误可查看纠错方式。

标签: 补码 数码开发

抱歉,评论功能暂时关闭!