什么是补码?什么是原码?
8位字长原码表示的有符号定点小数真值范围:1.1111111b~ 0.1111111b,即: -(127D/128)d ~ +(127/128)d。
8位字长补码表示的有符号定点小数范围: -1.0000000b ~ 0.1111111b,即: -1d ~ +(127/128)d。
补码的一些信息:
补码(2's complement)是一种用二进制表示有号数的方法,也是一种将数字的正负号变号的方式,常在计算机科学中使用。在台湾地区通常称为二补数。
一个数字的补码就是将该数字作比特反相运算(即一补数或反码),再将结果加 1,即为该数字的补码。在补码系统中,一个负数就是用其对应正数的补码来表示。
补码系统的最大优点是可以在加法或减法处理中,不需因为数字的正负而使用不同的计算方式。只要一种加法电路就可以处理各种有符号数加法,而且减法可以用一个数加上另一个数的补码来表示,因此只要有加法电路及补码电路即可完成各种有号数加法及减法,在电路设计上相当方便。
另外,补码系统的 0 只有一个表示方式,这点和一补数系统不同(在一补数系统中,0 有二种表示方式),因此在判断数字是否为 0 时,只要比较一次即可。
2023-07-11 广告
在计算机系统中,数值,一律采用补码表示和存储。
计算机,并不使用原码和反码
在计算机中,原码和反码,也都不存在。
讨论原码反码,又有什么意义呢?
---------------------
补码,其实,它就是一个【代替负数】的正数。
使用了补码之后,在计算机中,就没有负数了。
顺便,也就消除了减法运算。
那么,计算机只需配置一个加法器,就可以走遍天下了。
---------------------
补码(即一个正数),怎么就能【代替负数】呢?
理论基础在于:计数系统的周期性。
比如,2 位 10 进制数(0~99),计数周期就是 10^2 = 100。
那么: 25 - 1 = 24
25 + 99 = (一百) 24
只要你:舍弃进位,仅保留 2 位数,+99 就能代替-1。
同理,+98 也能代替-2。
。。。
这些正数,就可以称为“负数的补数”。
变换公式: 负数的补数 = 负数 + 周期。
另外还有:
时针,周期是 12,倒拨 3 小时、正拨 9 小时,等效吧?
三角函数的周期是 2π,-π/2、+3π/2,正、负角度,也等效。
。。。
这些负数变正数,公式都是: 正数 = 负数 + 周期。
反之,也成立,即: 负数 = 正数 - 周期。
---------------------
计算机中,8 位 2 进制数,周期就是 2^8 = 256。
-1 的补码,就是:-1 + 256 = 255 = 1111 1111(二进制)。
-2 的补码,就是:254 = 1111 1110(二进制)。
。。。
求补码,用“负数+周期”,直接就能求出补码。
不必经过“原码反码取反加一符号位不变”。
数学不好的老外,才需要弄哪些骚操作!
---------------------
只有负数,才需要变换成补码(正数)。
正数,不需要变换,也不允许变换,必须直接去相加运算。
所以,正数,它就没有补码。
有人说:正数的。。。都相同。
这就是被老外带到沟里去了。
原码反码,在计算机中,都是不存在的,哪还有什么相同!
不用原码和反码。
什么是补码?----补码是实用的代码。
什么是原码?----原码是无用的废码。