二进制,原码,反码,补码计算公式与案例。

二进制、原码、反码、补码详解(含计算公式与案例)

在计算机中,数值通常以 二进制补码(Two’s Complement) 存储,但在此之前,我们需要理解 原码、反码、补码 的概念及其转换关系。


1. 基本概念

(1) 二进制(Binary)

计算机使用 二进制(0 和 1) 存储数据,每一位称为 bit,8 bit = 1 byte。

(2) 原码(True Form)

  • 最高位表示符号0 为正,1 为负)
  • 其余位表示数值的绝对值
  • 示例
    • +5 的原码:00000101
    • -5 的原码:10000101

(3) 反码(Ones’ Complement)

  • 正数的反码 = 原码
  • 负数的反码 = 原码符号位不变,其余位取反
  • 示例
    • +5 的反码:00000101(与原码相同)
    • -5 的反码:11111010(符号位不变,其余取反)

(4) 补码(Two’s Complement)

  • 正数的补码 = 原码
  • 负数的补码 = 反码 + 1
  • 示例
    • +5 的补码:00000101(与原码相同)
    • -5 的补码:11111011(反码 11111010 + 1

2. 计算公式

(1) 原码 → 反码

数值规则
正数反码 = 原码
负数反码 = 符号位不变,其余位取反

(2) 反码 → 补码

数值规则
正数补码 = 反码 = 原码
负数补码 = 反码 + 1

(3) 补码 → 原码

数值规则
正数原码 = 补码
负数原码 = 补码取反 + 1(即补码的补码)

3. 计算案例

案例 1:计算 -6 的原码、反码、补码

  1. 原码
    • -6 是负数,符号位 1
    • 6 的二进制:0000110
    • 原码:100001101 表示负,00001106
  2. 反码
    • 符号位不变,其余取反:
    • 1000011011111001
  3. 补码
    • 反码 11111001 + 1 = 11111010

最终结果

表示法二进制
原码10000110
反码11111001
补码11111010

案例 2:计算补码 10101010 对应的十进制值

  1. 判断符号
    • 最高位 1 → 负数
  2. 补码 → 反码
    • 补码 10101010 - 1 = 10101001
  3. 反码 → 原码
    • 符号位不变,其余取反:
    • 1010100111010110
  4. 计算数值
    • 原码 11010110- (1×64 + 0×32 + 1×16 + 0×8 + 1×4 + 1×2 + 0×1) = -86

最终结果

  • 10101010(补码) = -86(十进制)

案例 3:byte 类型的 -128 为什么是 10000000

  • byte 是 8 位补码表示,范围 -128 ~ 127
  • 127 = 01111111
  • -128 的计算:
    1. 128 的二进制:10000000
    2. 补码表示 -128
      • 没有 +128(因为 byte 最大正数是 127
      • 10000000 直接表示 -128(补码规则)

4. 为什么计算机使用补码?

  1. 统一 +0-0
    • 原码:+0 = 00000000-0 = 10000000(浪费一个编码)
    • 补码:0 = 00000000-128 = 10000000(无 -0
  2. 简化运算
    • 减法可以转换为加法(A - B = A + (-B)
    • 例如:5 - 3 = 5 + (-3)
      • 5 的补码:00000101
      • -3 的补码:11111101
      • 相加:00000101 + 11111101 = 000000102,正确)
  3. 硬件实现简单
    • 不需要额外的减法电路,只需加法器。

5. 总结

表示法正数负数
原码符号位 0 + 数值符号位 1 + 数值
反码与原码相同符号位不变,其余取反
补码与原码相同反码 + 1

关键点

  • 计算机存储整数用补码(简化运算,避免 -0
  • byte 范围 -128 ~ 12710000000 表示 -128
  • 补码转十进制
    • 正数:直接计算
    • 负数:补码 → 反码 → 原码 → 计算绝对值并加负号

掌握这些概念,能更好地理解计算机如何处理 有符号整数! 🚀

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值