16 位二进制补码
16-bit two's complement number
问题是
以下 16 位数字的补码是多少?
1.0x3f9d
我的回答是:
0011111110011101 in binary because 0x3f9d is a positive number.
不过有人说答案是:
1100000001100011
我很困惑,因为 1100000001100011
是一个负数。哪个是正确答案?
3F9Dh为正数,等于0011 1111 1001 1101二进制。只有当一个数是负数时,才说二进制补码才有意义。
您可能会将(数字的)二进制补码表示与算法 "calculate two's complement of x" 混淆。如果你计算 3F9Dh 的补码,你最终会得到 1100 0000 0110 0011.
在 C 中你可以这样计算
(uint16_t)~0x3F9D + 1
相当于
(uint16_t)-0x3F9D
(假设二进制补码 CPU 而不是一些奇异的废话 CPU)
问题是
以下 16 位数字的补码是多少?
1.0x3f9d
我的回答是:
0011111110011101 in binary because 0x3f9d is a positive number.
不过有人说答案是:
1100000001100011
我很困惑,因为 1100000001100011
是一个负数。哪个是正确答案?
3F9Dh为正数,等于0011 1111 1001 1101二进制。只有当一个数是负数时,才说二进制补码才有意义。
您可能会将(数字的)二进制补码表示与算法 "calculate two's complement of x" 混淆。如果你计算 3F9Dh 的补码,你最终会得到 1100 0000 0110 0011.
在 C 中你可以这样计算
(uint16_t)~0x3F9D + 1
相当于
(uint16_t)-0x3F9D
(假设二进制补码 CPU 而不是一些奇异的废话 CPU)