Binary 16位二';s补码

Binary 16位二';s补码,binary,twos-complement,Binary,Twos Complement,问题是 以下16位数字的两个补码是什么 1.0x3f9d 我的答案是: 0011110011101为二进制,因为0x3f9d是正数 然而,有人说答案是: 110000000110011 我很困惑,因为110000000110011是一个负数。哪个答案正确?3F9Dh是一个正数,等于0011111001101二进制。只有当一个数字是负数时,才有意义谈论二的补码 您可能会将术语2的补码表示(数字)与算法“计算x的补码”混淆。如果你计算两个3F9Dh的补码,你最终会得到1100 0000 0110 0

问题是
以下16位数字的两个补码是什么

1.0x3f9d

我的答案是:

0011110011101为二进制,因为0x3f9d是正数

然而,有人说答案是:

110000000110011


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

3F9Dh是一个正数,等于0011111001101二进制。只有当一个数字是负数时,才有意义谈论二的补码

您可能会将术语2的补码表示(数字)与算法“计算x的补码”混淆。如果你计算两个3F9Dh的补码,你最终会得到1100 0000 0110 0011

在C语言中,可以按如下方式进行计算

(uint16_t)~0x3F9D + 1
这相当于

(uint16_t)-0x3F9D

(假设2是补码CPU,而不是异国胡说八道的CPU)

0011110011101
是正确的。但这与C有什么关系?如果输入是正的,则否定的结果肯定是负的。(尽管反过来未必正确)