数字表示-原码 反码 补码 移码

1. 计算规则

假设数字用8位编码
正数原 反 补码相同
原码 +25: 0 001 1001 最高位为符号位 后7位为真值部分
反码 +25: 0 001 1001 最高位为符号位 后7位为真值部分
补码 +25: 0 001 1001 最高位为符号位 后7位为真值部分

负数反码 = 符号位不变原码真值部分取反 负数补码 = 符号位不变反码+1
原码 -25: 1 001 1001 最高位为符号位 后7位为真值部分
反码 -25: 1 110 0110 最高位为符号位 后7位为原码真值取反
补码 -25: 1 110 0111 最高位为符号位 后7位为反码真值加一

特殊值
原码 +0: 0 000 0000 原码 -0: 1 000 0000
反码 +0: 0 000 0000 反码 -0: 1 111 1111
补码 +0: 0 000 0000 补码 -0: 0 000 0000 超出8位丢弃最高位

移码 = x + 偏移量 = 补码符号位取反 偏移量 = 2^(n-1) = 128
+25移码: 25 + 128 = 1001 1001
-25移码: -25 + 128 = 0110 0111
+0移码: 0 + 128 = 1000 0000
-0移码: -0 + 128 = 1000 0000

2. 解释

补码: 将减法转化为加法 正数不变 负数 = 模 - 绝对值
移码:加一个偏移量负数变为正数方便计算 浮点数阶码用移码表示 方便比较阶码大小
加法器实现加减功能: 减去一个正数等于加上一个正数

3. 原码 反码 补码的进化原因

  1. 原码->反码:只有原码不能正确计算
    原码计算 1 - 1 = 1 + (-1) = 0 000 0001 + 1 000 0001 = 1 000 0010 = -2 计算错误
    反码计算 1 - 1 = 1 + (-1) = 0 000 0001 + 1 111 1110 = 1 111 1111 = -0 真值正确但符号多余
  2. 反码->补码:只有反码有 -0 符号多余
    补码计算 1 - 1 = 1 + (-1) = 0 000 0001 + 1 111 1111 = 0 000 0000 = 0 没有-0
  3. 最终计算机用补码表示数值:减法化加法 符号位参与计算 电路统一 设计简单

参考链接

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值