我试图在这里理解这个答案。
这些0xf2
和0xfffffff2
值如何表示-14
?你能详细说明一下转换过程吗?
不过,我知道什么是二的补码。
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
在二进制数中,当使用二进制补码时,负值的最高有效位设置为 1。它是哪一位,这取决于它是多少位数。
0xf2
解释为 8 位有符号值是 -14,而0xfffffff2
解释为 32 位有符号值是相同的 -14。
32 位0x000000f2
是 242,与无符号8 位相同0xf2
(注意:Java 没有任何无符号整数类型)。
这些 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.