原码、反码、补码、移码及其运算

原码、反码、补码的介绍

原码

原码是计算机表示有符号整数最直接的方法。它的最高位(符号位)表示数字的正负号,剩下的位表示该数字的大小(即绝对值)。

  • 符号位:0 表示正数,1 表示负数。
  • 其余位:表示数值的大小。

例如,用 8 位表示:第一位表示符号,其余7位表示大小

  • +5 的原码表示为:0000 0101
  • -5 的原码表示为:1000 0101

优点:简单直观,人类容易理解。

缺点:不能直接进行加减法运算,尤其是处理负数时比较复杂。

反码

反码是对原码的一种改进,用于简化负数运算。正数的反码与原码相同,而负数的反码则是其原码的符号位保持不变,其余各位取反(0 变 1,1 变 0)。

  • 正数的反码:与原码相同。
  • 负数的反码:将该负数的原码(除了符号位)逐位取反。

例如,用 8 位表示:

  • +5 的反码:0000 0101
  • -5 的反码:1111 1010

优点:比原码更便于运算,尤其是减法。

缺点:存在两个零(0000 0000 表示正零,1111 1111 表示负零),导致零的表示不唯一。

补码

补码的表示是唯一的

下面解释-128的补码 

 

过这个练习可知,在字长为8的计算机中,-128的补码为1,0000000

而在原码中1,0000000表示0

 

补码是现代计算机中最常用的二进制编码方式,用于表示有符号整数。它的最大特点是把负数的表示形式变成了计算上更容易处理的形式。补码的定义是:正数的补码与原码相同,负数的补码是其反码加 1

  • 正数的补码:与原码相同。
  • 负数的补码:是其反码 + 1。

例如,用 8 位表示:

  • +5 的补码:0000 0101
  • -5 的补码:1111 1011(反码是 1111 1010,加 1 得到 1111 1011)。

优点

  1. 只有一个零,消除了两个零的问题(0000 0000 表示零)。
  2. 运算更简单,可以直接进行加减法运算。
  3. 是现代计算机中广泛使用的有符号数表示方法。
  4. 补码的符号位可以直接参与运算

缺点:表示负数的范围比表示正数的范围要大一位。

移码

移码是在原码的基础上,将符号位取反得到的。

原码、反码、补码的关系图

快捷转换


正数的原码和补码相同,因为正数的表示方式不需要复杂的处理。

负数的补码与原码不同,是为了简化计算机的运算过程,消除负零问题,并统一加法和减法的处理方式。补码的设计让负数可以通过简单的加法器进行运算,而不需要特殊的减法器,极大地简化了硬件设计。

一定要注意正数的原码、反码、补码、移码都是一样的

移码是人为规定的

原码、反码、补码、移码的关系图

无符号整数的加法 

 比较简单不过多介绍

无符号整数的减法 

减法运算比较昂贵,所以要将减法运算转化为加法运算


 

有符号的整数的运算

 要先转化为补码,只有补码机器才能运算

 注意:这里运算的结果为补码要记得转化为原码

 减法就是转化为加法

 我们可以发现这个与无符号整数的减法解决办法一样,那个减法变加法也相当于相反数,例如99-9=99+(-9)
可以这么理解:两个相反数相加为0,按位取反后两个数相加全为1,再在末尾加1;就会溢出全变成0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值