为什么会有补码、反码、原码?

2025-03-14 12:42:54
推荐回答(3个)
回答1:

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

这就是说,在计算机中,原码和反码,都是不存在的。

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

补码,实际上,就是一个“代替负数”的正数。

使用了补码,计算机中,就没有负数了,也就没有了减法运算。

所以,计算机中,只用一个加法器,就可以走遍天下了。

这就是说,使用补码,就可以简化硬件。

原码和反码,都没有这种功能,所以,计算机,根本就不用它们。

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

补码(就是正数),怎么能代替负数?

你可以看看钟表,时针倒拨 3 小时,正拨 9 小时,效果相同吧?

你看三角函数,-π/2 和 +3π/2,两者的函数值,相同吧?

再看 2 位 10 进数,0~99,计数周期是 10^2。

可以看到:

   25 - 1 = 24

   25 + 99 = (一百)  24

只要你忽略进位(10^2),+99 和-1 就是等效的。

以上这些,有如下规律:

   正数 = 负数 + 周期

此处得出的正数,就可以代替负数,进行运算。

这个正数,就是“负数的补数”。

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

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

8 位 2 进制数,共可以构成 256 组代码。

所以,计数周期,就是 2^8 = 256。

-1 的补码就是:-1 + 256 = 255

       = 1111 1111 (二进制)。

-2 的补码就是:254 = 1111 1110。

。。。

-128 的补码就是:128 = 1000 0000。

以上就是 256 组代码中的 128 个负数补码。

正数,必须直接参加运算,不许做任何变换。

正数本身,已经就是正数,所以并不存在什么补码(正数)。

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

计算机,只用补码。

原码反码,都是虚构出来的。

就像鬼魂一样,根本就不存在。

即使把它们说出天花来,它们也是不存在的。

求反加一、符号位不变。。。

老外数学不好,才会想出这些个烂办法。

回答2:

原码不需要解释,就是数本身.
补码通过反码求出.
关键是反码,反码的作用是把"减法"的问题变成"加法"的问题,因为计算机最善长的是做"加法".
如:
10-4=10+(-4)
(10-4)补=(10)补+(-4)补=0000 1010 + 1111 1100=0000 0110补=0000 0110反=0000 0110原=6

回答3:

数在计算机中是以二进制形式表示的。
数分为有符号数和无符号数。
原码、反码、补码都是有符号定点数的表示方法。
一个有符号定点数的最高位为符号位,0是正,1是副。
以下都以8位整数为例,
原码就是这个数本身的二进制形式。
例如
0000001
就是+1
1000001
就是-1
正数的反码和补码都是和原码相同。
负数的反码是将其原码除符号位之外的各位求反
[-3]反=[10000011]反=11111100
负数的补码是将其原码除符号位之外的各位求反之后在末位再加1。
[-3]补=[10000011]补=11111101
一个数和它的补码是可逆的。
为什么要设立补码呢?
第一是为了能让计算机执行减法:
[a-b]补=a补+(-b)补
第二个原因是为了统一正0和负0
正零:00000000
负零:10000000
这两个数其实都是0,但他们的原码却有不同的表示。
但是他们的补码是一样的,都是00000000
特别注意,如果+1之后有进位的,要一直往前进位,包括符号位!(这和反码是不同的!)
[10000000]补
=[10000000]反+1
=11111111+1
=(1)00000000
=00000000(最高位溢出了,符号位变成了0)
有人会问
10000000这个补码表示的哪个数的补码呢?
其实这是一个规定,这个数表示的是-128
所以n位补码能表示的范围是
-2^(n-1)到2^(n-1)-1
比n位原码能表示的数多一个
又例:
1011
原码:01011
反码:01011
//正数时,反码=原码
补码:01011
//正数时,补码=原码
-1011
原码:11011
反码:10100
//负数时,反码为原码取反
补码:10101
//负数时,补码为原码取反+1
0.1101
原码:0.1101
反码:0.1101
//正数时,反码=原码
补码:0.1101
//正数时,补码=原码
-0.1101
原码:1.1101
反码:1.0010
//负数时,反码为原码取反
补码:1.0011
//负数时,补码为原码取反+1
在计算机内,定点数有3种表示法:原码、反码和补码
所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。
反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。
补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。