16位二进制补码

时间:2016-11-04 12:27:59

标签: binary twos-complement

问题是 以下16位数的两个补码是多少?

  

1.0x3f9d

我的回答是:

  

0011111110011101二进制,因为0x3f9d是一个正数。

然而,有些人说答案是:

  

1100000001100011

我很困惑,因为1100000001100011是一个负数。哪一个是正确答案?

1 个答案:

答案 0 :(得分:1)

3F9Dh是正数,等于0011 1111 1001 1101二进制。当一个数字是负数时,说两个补语是有道理的。

你可能会混淆使用算法"计算x"的两个补码这两个词的补码表示(数字)。如果你计算3F9Dh的两个补码,你的确最终会得到1100 0000 0110 0011.

在C中你可以按

进行计算
(uint16_t)~0x3F9D + 1

相当于

(uint16_t)-0x3F9D

(假设有两个补充CPU而不是一些奇怪的废话CPU)