计算机中,二进制补码是指什么
发布网友
发布时间:2023-10-14 08:42
我来回答
共1个回答
热心网友
时间:2024-12-03 16:22
说到二进制补码,大家都知道:有符号数的负数的补码是
其正数的反码+1,例如
10001111
的补码是反码01110000
加
1
=01110001
,很多书都这么说,可是为什么这样计算的结果就是它的补码?为什么要用补码?很多书要么不解释,要么就是说:这是因为在计算机内补码计算最快。(其实是补码计算指令的CPU设计更容易实现)
最初我看的书,《大学计算机基础教程》(我非计算机专业),这破书说不清,道不明,给与我非常严重负面的影响,以至于我在以后的计算机学习过程中,程序设计中遇到大大小小不少麻烦和迷茫。
在某些计算机组成原理书上提到:其实补码的计算原理,是用一个模来减去无符号的正数部分。譬如时钟,12点之后是13点,但是时钟上没有13点怎么办?就用13减去12=1点。这个模是12.可惜这个比喻并不是很好。
请看
一个字节长的无符号数的表示范围
:0~255,有符号数的表示范围:-128~127
,
注意,这个表示范围的写法极有可能影响我们的思维,从而导致错误。我们应该这样来写:0~127
~
-128
~
-1
,这才是较好的写法。为什么?因为这个写法的数的顺序与0~255
一一对应。
由上,我们了解,其实补码不过是用128
~
255
这段范围的数来表示
~128
~
-1这段范围的负数。那么我们就可以凭自己,而不是看教材,就可以推测出计算补码的公式,就是:256-欲求的负数的绝对值=
此负数的补码。
没错,就是这么简单的东西,可是却困扰了很多人。可见有个好的教材是多么的重要。
至于前面
“负数的补码是
其正数的反码+1”
,
极为垃圾的教材才会把这个计算方法作为初始方法来教。因为这个计算方法屏蔽了补码的计算原理。其实这不过是
“256
-
欲求的负数的绝对值
=
此负数的补码”的一个比较取巧的计算方法而已。请看
256=1
0000
0000
=1111
1111+1,而
1111
1111减任何二进制数的结果就是把这个数取反,那么
256
-
某二进制数A
既是:将
A取反
+1
以上:完毕!
注:所有讨论均在字节长范围内(8bit)
进行