誰能解釋從以下兩個println語句輸出之間的差別?爲什麼java.lang.Long中只有63位(MAX_VALUE)?
public class LongTest {
public static void main(String[] args) {
System.out.println(Long.toBinaryString(0xffff_ffff_ffff_ffffL));
System.out.println(java.lang.Long.toBinaryString(Long.MAX_VALUE));
}
}
的輸出是:
1111111111111111111111111111111111111111111111111111111111111111
111111111111111111111111111111111111111111111111111111111111111
輸出的第一行包含64組二進制數位。第二行只包含63個二進制數字。
如果如果0xffff_ffff_ffff_ffffL比Long.MAX_VALUE是更大的,我希望編譯錯誤。但是這個程序顯然是編譯的,所以輸出的差異必定是由於其他原因。
可能是一個64位的值,但是1位用於符號,所以你effectly有範圍63位。 –
大概【二補](http://en.wikipedia.org/wiki/Two%27s_complement),而第一位爲符號位。 –
'Long.MAX_VALUE'是'0x7fffffffffffffffL'。 – arshajii