-32768的二进制补码是多少?

我算出来应该是(11000000000000000)!一共17位。可是书上写的是(1000000000000000),它书上到底是怎么算的?补充:我是在C语言书上看到的,书上讲16位有符号int型取值范围是-32768到32767!急......这里先谢谢回答者了!

第1个回答  2022-06-21

求补码,常说的是先求原码,再取反,再加一,才能求到补码。

其实,“取反加一”只是一个低能的算法而已,并不是求补码根本方法。

补码,是自然生成的,与原码反码毫无关系。

比如,数值 0,在八位计算机中,就是以 0000 0000 来存放。

数值 +1,就给 0 加个一,即:0000 0001。

数值 +2,就再加一次一,即:0000 0010。

。。。

数值-1,你就给 0 减一,即:1111 1111 (十进制255)。

数值-2,就再减一次一,即:1111 1110 (十进制254)。

。。。

其它数值,也都是这个规律,递增递减而已,不用特别的设计。

以上这些二进制,就是:整数的补码。

总结:

 正数的补码,你就用十进制,直接转换成二进制。

 零的补码,就是:一串 0 而已。

 负数的补码,就是:负数+256。

   一般化,就是:负数+2^n,n 是位数。

--------------------------

如果 n = 16,2^16 就是 65536。

那么,[-32768]补 = -32768 + 65536

         = 32768

         = 1000 0000 0000 0000 (二进制)

而,[+32767]补 = 32767

        = 0111 1111 1111 1111 (二进制)

楼主所疑惑的两个补码,就是这么求出来的。

--------------------------

补码,就是自然生成的,与原码反码,毫无关系。

况且,在 n = 16 时,-32768 根本就没有原码和反码。

那么,取反加一,就没有用武之地。

因此,凡是用“取反加一”求补码的答案,都是错误的。

第2个回答  2009-07-11
你说的也对
补码1000000000000000和11000000000000000是相等的
第3个回答  2021-10-21
有符号数-32768,求 16 位补码,就有些尴尬了。
因为-32768 的原码反码,都是不存在的。
这就无法使用“取反加一”方法。
那么,只能用“补码的定义式”来求得了。
第4个回答  2009-07-11
我忘记怎么算了
相似回答