什么是原码,1’s Complement Code反码和2’s Complement Code补码

笔者在英文资料中见到1’s Complement Code和2’s Complement Code乍一看直译都是补码,按补码理解又搞的一头雾水,其实他们是有区别的。这篇文章帮你彻底理解什么是1’s Complement Code和2’s Complement Code

True Form原码,是一种计算机中对数字的二进制定点表示方法。原码表示法在数值前面增加了一位符号位(即最高位为符号位):正数该位为0,负数该位为1(0有两种表示:+0和-0),其余位表示数值的大小。为了便于ALU进行运算,又发展出反码、补码等转换过的码。特别的:正数的原码 = 反码 = 补码。引进补码的作用是为了让计算机更方便做减法。
补充: 二进制数的运算方法

Complement Code 的形式有2种:

  • 1's Complement Code 1的补码:常翻译为 反码
    多用在IP、TCP的checksum校验和中。
    计算方法:
    - 正数的反码与原码相同
    - 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反
  • 2's Complement Code 2的补码:常翻译为 补码/二补码
    平时在计算机科学中学习的补码是2的补码,它最大的好处在于使得所有的加减法运算可以用同一种电路完成,即将 a - b转化为a + (-b),具体的解释、证明请参阅 关于2的补码
    计算方法:
    - 正数的补码和原码相同
    - 负数的反码是在其原码的基础上, 符号位不变,其余各个位取反再加1。

以-9(= 0b1000 1001)和 9(= 0b0000 1001)为例:

十进制表示-99
Sign-Magnitude 原码1000 10010000 1001
1’s Complement Code 反码1111 01100000 1001
2’s Complement Code 补码1111 01110000 1001

另:补码的最高有效位(MSB: Most Significant Bit)是符号位(Sign Bit),0代表正数,1代表负数,例如:对于一个4位的补码来说:1111是-1(=0b1001)的补码,而1001则是-7(=0b1111)的补码

拓展阅读:
1的补码vs 2的补码
关于补码的由来和作用
二进制的原码、反码、补码

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值