1

我试图在这里理解这个答案。

这些0xf20xfffffff2值如何表示-14?你能详细说明一下转换过程吗?

不过,我知道什么是二的补码。

4

3 回答 3

3
0xf2 = 11110010

一位是符号位。所以符号是负号。要获得实际价值,请接受 2 的恭维。

11110010 -> 1's complement -> 00001101 -> Add 1 -> 00001110 = -14

同样,取0xfffff...f2. 开头的符号位。取 2 的补码。

1111-1111-1111.....0010 -> 1's complement -> 00000000000...1101 -> Add 1 -> 0000...1110 -> -14

前面的任何数量1111... 都不会对带负号的数字的值产生影响,就像0000..对正值一样。


上面的计算是针对8-bit signed 0xf2数学上相等的。32-bit signed 0xfffffff2

于 2012-11-13T21:30:28.147 回答
2

在二进制数中,当使用二进制补码时,负值的最高有效位设置为 1。它是哪一位,这取决于它是多少位数。

0xf2解释为 8 位有符号值是 -14,而0xfffffff2解释为 32 位有符号值是相同的 -14。

32 位0x000000f2是 242,与无符号8 位相同0xf2(注意:Java 没有任何无符号整数类型)。

于 2012-11-13T21:33:17.683 回答
0

这些 0xf2 和 0xfffffff2 值如何表示 -14?

他们没有。

int a = 0xf2;
int b = 0xfffffff2;

是不同的值。它们代表相同数字的唯一情况是:

byte a = (byte)0xf2;
byte b = 0xfffffff2;

这是因为在整数上下文中使用字节时的符号扩展。注意

byte a = 0xf2;

doesn't even compile, so it's hard to see what your question is really about.

于 2012-11-14T02:24:16.057 回答