引言
补码(一个正数),它就是一个数字而已。
数字,可以写成各种进制,如:十、二、16 进制等等。
进行转换时,用十进制来计算,显然是最方便的。
只有在涉及到内存的时候,才会用到二进制。
比如在 “与或非左移右移等等” 时,就必须用二进制了。
由于,数值与补码的转换,可以不用二进制。那么,原码反码符号位,就都没有任何用处了。
而且,在计算机中,根本就没有原码和反码。所以,从原码反码开始学习补码只会把人绕进去。
补码的计算
一个字节是 8 位 2 进制数,计数周期是 2^8 = 256。
-1 的补码,就是 255 = 1111 1111 (二进制);
-2 的补码,就是 254 = 1111 1110 (二进制);
。。。
-128 的补码,就是 128 = 1000 0000 (二进制)。
-------------------
所有负数的补码,都是正数。
而正数,已经就是正数,当然就不需要再代替了。
所以,【正数,根本就没有补码】。
-------------------
求补码,就是这么简单。原码反码取反加一,都是没有任何用处的。
=======******【划重点】******=======
求补码的通用公式:
代替负数的正数 (即补数) = 负数 + 周期。
===================
补码的意义
综上所述:
补码,它就是一个【代替负数】的正数。
用补码(一个正数)代替负数之后,计算机中就没有负数了。
同时,减法,也就转换成加法运算了。
那么,加减法,就可以统一用加法实现了。
此时,计算机,只要配置一个加法器,便可走遍天下。
使用补码的目的,就是简化硬件。
而原码反码,都没有这种功能!
所以,在计算机中,根本就没有原码反码!
在计算机系统中,正负数值,一律采用补码表示和存储。
此时,应该先明白:
什么是补码呢?
为什么要使用补码呢?
补码,来自于固定长度的运算方法。
你看 2 位 10 进制数的运算吧:
25 - 1 = 24
25 + 99 = (一百) 24
如果你忽略进位,只取 2 位数:
+99 和-1 就是等效的;
减法运算,也就能用加法来实现!
那么:
+99 就可以称为【-1 的补数】。
+98 就可以称为【-2 的补数】。
。。。
两者关系式:
正数 (即补数) = 负数 + 10^2。
式中的 10^2 = 100,是 2 位 10 进制数的计数周期。
三角函数
-π/2、+3π/2,也是等效的。
即:-90°、+270°,正负两个角度,等效。
换算公式是:正角度 = 负角度 + 周期。
式中的周期是:2π(360°)。
除此之外,还有时针!
倒拨 3 小时、正拨 9 小时,也是等效的。
算法:+9 =-3 + 12 (时针的周期)。
在计算机系统中,正负数值,一律采用补码表示和存储。
在计算机系统中,并不使用原码和反码。
在计算机系统中,原码和反码,都是不存在的。
不存在的东西,你还介绍它们干嘛呀?
当然,计算机老师,还指望用这个,坑骗学生!
数值和补码,是可以直接转换的。
转换的方法,也有许多种。并不需要通过原码反码来过渡。
况且,八位的原码和反码,都不能表示-128。
那么,-128 的补码,用原码取反加一是求不出来的。
由这一条,就从理论上证明了:“取反加一” 是不正确的。
——————————————摘自“做而论道_CS”的评论——————————————————