答案 0 :(得分: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
,在数学上等于。
答案 1 :(得分:2)
在二进制数中,当使用二进制补码时,负值的最高有效位设置为1.它是哪个位,取决于它的位数。
0xf2
被解释为8位有符号值是-14,而0xfffffff2
被解释为32位有符号值是-14。
32位0x000000f2
为242,与 unsigned 8位0xf2
相同(注意:Java没有任何无符号整数类型)。
答案 2 :(得分:0)
这些0xf2和0xfffffff2值如何表示-14?
他们没有。
int a = 0xf2;
int b = 0xfffffff2;
是不同的值。它们代表相同数字的唯一情况是:
byte a = (byte)0xf2;
byte b = 0xfffffff2;
这是因为在整数上下文中使用字节时符号扩展。注意
byte a = 0xf2;
甚至没有编译,因此很难看出你的问题是什么。