为什么要使用原码,反码,补码

 我来答
沙里波特
2024-11-25 · TA获得超过5248个赞
知道大有可为答主
回答量:1.1万
采纳率:95%
帮助的人:630万
展开全部

为什么要使用原码,反码,补码

实际上,计算机根本就不使用原码和反码!

在计算机系统中,数值,一律采用补码表示和存储。

原码和反码呢?

计算机从来就没有用过它们。

.

在计算机中,以八个二进制位,作为一个字节。

.  数字 0,存放的补码,就是 0000 0000。

正数,依次递增,即可:

.  数字 +1,其补码就是 0000 0001。

.  数字 +2,其补码就是 0000 0010。

.  。。。

负数,就是依次递减:

.  数字-1,就是 0000 0000-1 = 1111 1111。

.  数字-2,就是 1111 1111-1 = 1111 1110。

.  。。。

归纳:

.  正数的补码,就是:0 + 该正数 = 该正数。

.  负数的补码,就是:0 + 该负数。

比如:

.   +9 的补码是:0000 1001。

.  -9 的补码是:0000 0000-0000 1001=1111 0111。

你看吧,求补码的计算过程,也用不着原码和反码。

.

有了补码,就可以用加法,完成减法运算了。

比如: (+2)-(+1) = +1。

计算机的计算如下:

.  0000 0010 + 1111 1111= 0000 0001。

做而论道
高能答主

2022-03-05 · 把复杂的事情简单说给你听
知道大有可为答主
回答量:3万
采纳率:80%
帮助的人:1.1亿
展开全部

计算机中,只有补码,并没有原码和反码

借助于补码,负数和减法,都可以转化成加法来进行运算。

那么,计算机的硬件,就可以简化了。

因此,在计算机中,只有加法器,并没有减法器。



------------------------


补码是怎么回事? 这得从“补数”谈起。



计算机所能计算的位数,是固定的,如八位机、16 位。。。



位数限定之后,就可以用“补数”代替负数,用加法实现减法运算。



如限定两位十进制,-1,就可以用 +99 代替。



   25 - 1 = 24



   25 + 99 = (一百) 24



舍弃进位,只取两位,这两种算法功能就完全相同。



99,就是-1 的补数。 计算公式:补数 = 一百+负数。



一百,是两位十进制数的计数周期。



-------------------------



计算机用二进制,补数,就改称为:补码。



八位二进制:0000 0000 ~ 1111 1111 (十进制 255)。



计数周期是:2^8 = 256。



求负数补码的计算公式,也是: 周期 + 负数。



-1 补码就是:256 + (-1) = 255 = 1111 1111(二进制)。



用不存在的“原码反码取反加一”来求,也是这个结果。



正数,不用转换,直接参加运算。所以,正数自身就是补码。



-------------------------



举例说明,如: 5 - 7 = -2。



用补码计算的过程如下:



    5 的补码=0000 0101



    -7的补码=1111 1001



--相加-------------



   得   (1)  1111 1110 = -2 的补码



舍弃进位,只保留八位,这就用加法,实现了 5-7。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
推荐于2017-11-23
展开全部
计算机只能识别0和1,使用的是二进制。而在日常生活中人们使用的是十进制,并且我们用的数值有正负之分。于是在计算机中就用一个数的最高位存放符号(0为正,1为负)。这就是机器数的原码了。
有了数值的表示方法就可以对数进行算术运算,但是很快就发现用带符号位的原码进行乘除运算时结果正确,而在加减运算的时候就出现了问题,如下:假设字长为8bits
(1) 10 - (1)10 = (1)10 + (-1)10 = (0)10
(0 0000001)原 + (1 0000001)原 = (1 0000010)原 = ( -2 ) 显然不正确。
因为在两个整数的加法运算中是没有问题的,于是就发现问题出现在带符号位的负数身上。对除符号位外的其余各位逐位取反就产生了反码。反码的取值空间和原码相同且一一对应。下面是反码的减法运算:
(1)10 - (1)10 = (1)10 + (-1)10 = (0)10
(0 0000001)反 + (1 1111110)反 = (1 1111111)反 = ( -0 ) 有问题。
(1)10 - (2)10 = (1)10 + (-2)10 = (-1)10
(0 0000001)反 + (1 1111101)反 = (11111110)反 = (-1) 正确。
问题出现在(+0)和(-0)上,在人们的计算概念中零是没有正负之分的。(印度人首先将零作为标记并放入运算之中,包含有零号的印度数学和十进制计数对人类文明的贡献极大)。
于是就引入了补码概念。负数的补码就是对反码加一,而正数的补码不变,正数的原码反码补码是一样的。在补码中用(-128)代替了(-0),这个是人为规定的,所以补码的表示范围为:
(-128~0~127)共256个。
注意:(-128)没有相对应的原码和反码, (-128) = (1 0000000) 补码的加减运算如下:
(1)10 - (1)10 = (1)10 + (-1)10 = (0)10
(0 0000001)补 + (1 1111111)补 = (0 0000000)补 = ( 0 ) 正确。
(1)10 - (2)10 = (1)10 + (-2)10 = (-1)10
(00000001)补 + (11111110)补 = (11111111)补 = (-1) 正确。

所以补码的设计目的是:
⑴ 使符号位能与有效值部分一起参加运算,从而简化运算规则。补码机器数中的符号位,并不是强加上去的,是数据本身的自然组成部分,可以正常地参与运算。
⑵ 使减法运算转换为加法运算,进一步简化计算机中运算器的线路设计。
所有这些转换都是在计算机的最底层进行的,而在我们使用的汇编、c等其他高级语言中使用的都是原码。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式