原码,反码,补码以及相应的转换与计算

原码、反码和补码是在计算机中用来表示和处理整数的三种表示方法:

  1. 原码(Sign-Magnitude):原码是最简单直观的整数表示方法,其中最高位表示符号位(0表示正数,1表示负数),其余位表示数值部分的绝对值。但是原码存在正零和负零两个零的表示,而且加减法运算复杂,所以并不常用。
  2. 反码(One's Complement):反码是在原码的基础上改进而来,负数的表示方法是将其绝对值的原码按位取反得到。负数的反码最高位为1,但没有正零和负零的问题。然而,反码也存在加减法运算时需要处理进位的问题。
  3. 补码(Two's Complement):补码是最常用的整数表示方法,负数的表示是将其绝对值的原码按位取反后加1。补码只有一个零,同时加减法运算可以统一处理正数和负数,无需额外的逻辑。因此,补码是计算机中处理整数运算的首选表示方法。

总结起来,原码是最基础的表示方法,反码是对原码的改进,而补码是在反码基础上进一步优化得到的,具有更好的运算性质和效率。在实际计算机系统中,通常使用补码来表示负数。

反码

反码是一种表示负数的方法,也称为二进制反码。在计算机中,反码通常用于表示负数,类似于补码。反码的表示方法如下:

  1. 对于正数,其反码就是其二进制表示(符号位为0)。
  2. 对于负数,其反码是将其绝对值的二进制表示按位取反(0变1,1变0),符号位保持不变。

举个例子:

  • 对于十进制数 -5,其二进制表示为 1011,取反得到 0100,符号位保持为1,即反码为 1100。
  • 对于十进制数 3,其二进制表示为 0011,即正数的反码就是其本身。

反码和补码的区别在于负数的表示方法不同。在补码中,负数的表示是在反码的基础上再加1。而在反码中,负数的表示只是简单地取反,不需要额外的加1操作。

补码

补码是一种表示负数的方法,也称为二进制补码。在计算机中,通常使用补码来表示负数,以方便进行加减运算。补码的表示方式如下:

  1. 对于正数,其补码就是其二进制表示(符号位为0)。
  2. 对于负数,其补码是将其绝对值的二进制表示按位取反(0变1,1变0),然后在末尾加1。

举个例子:

  • 对于十进制数 -5,其二进制表示为 1011,取反得到 0100,再加1得到补码 0101。
  • 对于十进制数 3,其二进制表示为 0011,即正数的补码就是其本身。

补码的一个特点是,加减法可以统一处理正数和负数,而不需要额外的逻辑。这使得计算机在进行算术运算时更加高效和简单。

一个简单的计算例子:

8为2进制signed int最大为01111111,即2^7 - 1,若将该数乘以2,该数字为多少呢?

根据题意,乘以2即位左移一位,即数字变为11111110,发生溢出,此时最高位仍然表示符号位,那么对这个数字取补码即(1全部转换为0,0变为1,最后加1,符号位不变)为10000001+1=10000010=-2。

或者可以这么想,11111110这个数字如果加上10就会变为00000000,10代表的是十进制的2,即原数字+2=0,所以原数字=-2。

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值