我正试图理解Java如何在内部存储整数。我知道所有的Java原始整数都是带符号的,(除了short?)。这意味着一个字节中可用的位数比数字少一个。
我的问题是,所有整数(正数和负数)是否都以二进制补码形式存储,还是只有负数以二进制补码形式存储?
我看到规范中写着x位二进制补码数
。但我经常感到困惑。
例如:
int x = 15; // Stored as binary as is? 00000000 00000000 00000000 00001111?
int y = -22; // Stored as two complemented value? 11111111 11111111 11111111 11101010
编辑
明确一下,x = 15
。
In binary as is: `00000000 00000000 00000000 00001111'
Two's complement: `11111111 11111111 11111111 11110001`
因此,如果您的答案是 所有
数字都以二进制补码形式存储,则:
int x = 15; // 11111111 11111111 11111111 11110001
int y = -22 // 11111111 11111111 11111111 11101010
这里的混淆在于标志说,两个数字都是负数。也许我误读/误解了它?
编辑 不确定我的问题是否令人困惑。被迫分开提问:
我的问题确切地说:正数是以二进制形式存储的吗?而负数则以二进制补码形式存储吗?
有些人说所有数字都以二进制补码形式存储,而另一个答案则表示只有负数以二进制补码形式存储。
char
是唯一的无符号整数值。 - undefined