原码、反码和真值都不存在!


:均来自 做而论道 答主的理解。

补码的理解

在计算机系统中,根本就没有原码和反码,真值也是不存在的。在计算机系统中,并不使用原码和反码,数值(也就是真值),一律采用补码表示和存储。补码、真值都和原码、反码毫无关系。

补码,其实是一个“代替负数”进行运算的正数。采用了补码之后,计算机中就没有负数了,也消除了减法运算。利用补码,可以简化算法,从而就能简化硬件。

补码(即正数)能代替负数,根源在于“计数系统的周期性”。

十进制计算

如果使用 2 位 10 进制数(0~99),计数周期就是 10^2 = 100。此时,就可以有:

25-1 = 2425 + 99 = (一百) 24

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

+99,就能代替-1。+98,也可以代替-2。这些“代替负数的正数”,就可称为“负数的补数”。

关系式:补数 = 负数 + 10^n。(n 是补数的位数。10^n 是 n 位数的计数周期)。

二进制计算

这个关系式,补数 = 负数 + 10^n,在计算机中,也可以使用。

8 位 2 进制:0000 0000~1111 1111 (十进制 255)。

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

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

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

-1 补码就是:-1+256=255=1111,1111

-2 的补码是: 254 = 1111,1110

正数,不可转换,必须直接参加运算。所以,零和正数,并不存在补码。

计算机中的运算,也就是一些“二进制数”的运算,与人类使用的十进制数的运算,并没有多少的差异。“二进制数”的运算,根本就不需要格外的证明!!!

而且,“符号位原码反码取反加一符号位不变”,并没有理论依据。

补码和真值换算

知道补码,求真值,方法步骤,是非常简单的。既不用求“反码原码”,也不用想着“符号位不变”。“取反加一”或“减一取反”,都是不需要的。

直接进行数制转换即可。

数制转换

补码的首位,既是符号位,也代表数值。

如果是八位补码,首位 1 就是-128。

如果是 16 位补码,首位 1 就是-32768。

其余数值位都是正数。加在一起,就是真值。

负数补码转真值

有一个八位的补码,是 1000,1110

首位 1,既代表负数,也代表-128。其余都是正数:8+4+2=+14。求总和,故其真值就是:-114

另一个八位的补码,是0000,1110。其真值就是:8+4+2=+14

负数真值转补码

求负数的补码,方法是:[X]补=模+该负数。用不着原码反码。

-125的补码:先确定首位是1,即-128。数值位,那就是3 了。所以,[-125]补,就是 1000,0011

完全用不着"原码反码取反加一符号位不变 … "。

求-X 的补码,你就用二进制减法算一下“0-X”,很轻松的。求负数的补码,就是这么简单!

数值 0,存入到一个字节中,就是0000,0000。-1,你存入什么呢?显然是0-1

用二进制计算0-1,相减的结果,存到一个字节中,就是1111,11111111,1111就是-1的补码。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值