什么是补码?怎么求补码?
看看书,就会知道,补码,是有严格定义的。
按照定义来求补码,就用不着涉及原码反码。
如果,你非要用求反加一的做法,就难免碰上原码反码。
但是,的八位码长的限制下,-128,既没有原码,也没有反码。
这时,你还要用求反加一的做法,就一定会碰的头破血流。
------------
按照补码的定义,负数的补码,定义如下:
[X]补 = 模-| X |
按照定义,-128,如下求补码。
[-128]补 = 256-|-128| = 128
写成二进制,就是:1000 0000。
------------
这就是详解。
简不简单? 意不意外?
是不是比“求反加一”更方便?
可以参考:网页链接
看到上一篇答案,后面有许多人留言评论。
呵呵,多数人,都是推崇“求反加一”的。
你们这些人,都是被人忽悠瘸了。
如此简单的定义、方法,你们不学、不用,
偏要去钻死胡同,呵呵
使用求反加一!!!
你们能找到-128 的原码、反码吗?
求补码,有【通用的定义式】。 也有简易操作的“取反加一”。
“取反加一”的方法流传太广,以至于取代了定义式的主要地位。
其实,原码、反码、符号位、取反加一,这些,是一个不完善的方法。
因为“取反加一”有缺陷,所以,“如何求-128 补码”就是一个难题。
“取反加一”其根本的弊病在于:
世界上,只有一个零,但是原码反码,都设定了两个编码,这就乱套了。
此时,八位原码反码的表示范围,只能是:-127~+127。
但是,八位补码,却要表示-128!
-128 没有原码反码,“取反加一”从何处下手?
很多人,都没有学到【补码的定义式】,所以,就不会求了。
另外,[-0]补码=0000 0000,也是难以解释的。
-0,符号位不应该是 1 吗?
难道,-0 是正数?
有人辩解说,0 只有一个补码,没有+0、-0 之分。
一个补码,是谁规定的?
原码反码,又为什么要弄两个编码?
[-0]反码 + 1,是不是补码?
“取反加一”,就是一大篇自相矛盾的谬论。
用【补码的定义式】求补码,就什么毛病都没有了。
但是,弄的太简单了,就无法体现出计算机老师的水平高了。