计算机组成原理 原码、补码、反码和移码

本文介绍了计算机中无符号数和有符号数的表示方法。无符号数在机器字长固定时能表示的数值范围比有符号数更大。有符号数的表示方式包括原码、补码、反码和移码,其中补码用于简化加减运算,使得减法可以通过加法来实现。原码直接表示真值,补码通过正数的补数和负数的正补数表示数值,反码常作为求补码的过渡。移码则通过加上一个常数帮助判断数值大小。计算机通常使用补码进行运算,以减少硬件复杂性和成本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、无符号数

        计算机中的数均存放在寄存器中,通常称寄存器的位数称为机器字长。无符号数,即没有符号的数字,寄存器中的每一位都可以用来存放数值。当存放有符号数的时候,则需要留出位置存放符号。因此,在机器字长相同的时候,无符号数和有符号数所对应的数值范围是不同的。以机器字长为16位的话,无符号数的表示范围为0-65536,有符号数表示的范围为-32768-32767。如果为32位的话,无符号数的表示范围位0 - 2^{32},有符号数表示范围为-2^{31} - 2^{31}。64位依此类推。

二、有符号数

(1)机器数与真值

        对于符号数来说,正负是机器无法识别的,所以使用0表示正,1表示负,于是符号也被数字化了,并且规定它放在有效数字前面,即组成了有符号数。

        把符号数字化的数成为机器数,而把带+、-符号的数成为真值。符号数字化后,符号和数值就形成了一种新的编码。在运算过程中,符号位能否和数值部分一起参与运算?如果参与运算,符号位有如何进行处理?这些问题都与符号位和数值位所构成的编码有关,这些编码就是原码、补码、反码和移码。

(2)原码表示法

        原码是机器数中最简单的一种表示形式,符号位为0表示正数,为1表示负数,数值位即真值的绝对值,故原码表示又称为带符号的绝对值表示。

        原码表示简单明了,并易于和真值转换。但用原码进行加减运算时,却带了许麻烦。 如,当两个操作数符号不同且要作加法运算时,先要判断两数绝对值大小,然后将绝对值大的数减去绝对值小的数,结果的符号以绝对值大的数为准。运算步骤既复杂又费时,而且本来是加法运算却要用减法器实现。那么能否在计算机中只设加法器,只作加法操作呢?如果能找到一个与负数等价的正数来代替该负数,就可把减法操作用加法代替。而机器数采用补码时,就能满足此要求。

(3)补码表示法

        一个负数可以用它的正补数来代替,而这个正补数可以用模加上负数本身求得。

        一个正数和一个负数互为补数时,它们的绝对值之和就是模数。

        正数的补数就是其本身。

        将补数的概念应用到计算机,就出现了补码。

1、采用补码后,可以方便地将减法运算转化为加法运算,运算过程得到简化。因此,计算机中有符号数一般采用补码表示。

2、正数的补码即是它所表示的数的真值,而负数补码的数值部分却不是它所表示的数的真值。

3、采用补码进行运算,所得结果仍为补码。为了得到结果的真值,还得进行转换(还原)。转换前应先判断符号位,若符号位为0,则所得结果为正数,其值与真值相同;若符号位为1,则应将它转换成原码,然后得到它的真值。

(4)反码表示法

        反码通常用来作为由原码求补码或由补码求原码的中间过渡。

        当真值为正,原、补、反的表示形式均相同,即符号位为0,数值部分与真值相同。

        当真值为负,原、补、反的表示形式不同,但是符号位均为1,而数值部分,补码是原码的求反加1,反码是原码的每位求反。

(5)移码表示法

        当真值用补码表示时,人很难从补码的形式上直接判断其真值的大小。但是如果对于每个真值加上2^n,这样就可以看出原真值的实际大小。

        下面的图片表示了真值、补码、移码的关系。

三、总结

        计算机作数值运算是用补码进行的,它能够把减法转化为加法来实现,这并不是说减法真的能用加法来实现,这是不可能的。原因在于求补码时已作了一次减法,是在事先准备工作里作的。在二进制里求补码时作的减法是硬件非常容易实现的,只要按位变反(即求反码)再用加法器加1,就得到补码。所以计算机只设计加法器,而不用再专门设计减法器,以达到使电路简单,降低成本的目的。
        如果十进制系统里也要把减法转化为加法,那么在求十进制补码时作的就是减法,必须用减法器来实现。

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

坐望云起

如果觉得有用,请不吝打赏

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值