
十六进制的80h,为什么表示十进制的-128,负号是从哪里体现?
表示成二进制不应该是100 0000吗?
请复习16进制转2进制的方法。
计算机,使用的是二进制,八位二进制数的范围是:0000 0000 ~ 1111 1111。
如果出现了进位,就是:2^8 = 256。
使用二进制,就比较琐碎,所以,常常使用等值的十六进制:FFH、或十进制:255。
那么,80H 也就是:1000 0000B,也是:128。
无论写成什么进制,它们都是相等的。
无论写成什么进制,数,就是数!并没有任何的正负号。
二进制的 1111 1111,它就是十进制的 255,永远是 255 !
负号,来自于你的算法。
作加法运算时,你如果舍弃了进位,就是减去了 2^8 = 256!
此时,你再加上 255,它也就是:-1 !
(十进制加法:27 + 99 = 一百 26,丢了进位 100,就是减法:27-1 = 26 !)
同理,加上 128 = 1000 0000 = 80H,也就是:-128。
舍弃了进位,正数,就能当成负数使用!
舍弃了进位,用加法,就能完成减法运算!
舍弃了进位,就能省掉减法器,从而简化计算机的硬件!
**划重点***************************
所谓的负数、所谓的补码、所谓的简化运算,不过就是:你弄丢了进位!
********************************
八位的补码与其十进制数如下:
上表中,有求补码的公式。
因为 8 位的原码和反码,都编造了两个零,所以,就都缺少了一个:-128。
那么,用常说的“取反加一”方法求-128 的 8 位补码,显然是行不通的。
求-128 的补码,必须使用上表中的公式。
你回去看看计算机的教材,在书上应该有这个定义式:
那么,[-128 ]八位补码=2^8-128 = 128 = 1000 0000 (二进制补码)。
利用定义式求补码,是非常简单方便的,既不用背“机器数真值符号位原码反码补码正数三码相同 ... ”这一滩垃圾,也不会在-128 这里处于绝境。
但是,老外的算术水平太洼,也就只好用那些繁琐的方法了。 而且,即使他们求不出来-128 的补码,也可以让你看的眼花缭乱,佩服的不得了,也就忽略了-128 应该如何表示了!
其实,那些花活,只不过是忽悠罢了,你如果看过《卖拐》就明白计算机老师的用意。
只有像题主这种清醒的人,才会注意到-128 的问题。 那些仍然试图用“取反加一”来解释-128 补码的人,显然都是被计算机老师忽悠瘸了