我有在Java中返回值不正確左位移位的問題...的Java位左移返回錯誤值
以108 < < 60實例。答案應該是*:
124515522497539473408
Java正在這個語句,返回此值
-4611686018427387904
:
System.out.println(108L << 60L);
爲什麼???這兩個值都是強制性的,所以我沒有理由認爲任何位值應該被截斷。我在這裏錯過了什麼?
*引文:Wolfram Alpha
我有在Java中返回值不正確左位移位的問題...的Java位左移返回錯誤值
以108 < < 60實例。答案應該是*:
124515522497539473408
Java正在這個語句,返回此值
-4611686018427387904
:
System.out.println(108L << 60L);
爲什麼???這兩個值都是強制性的,所以我沒有理由認爲任何位值應該被截斷。我在這裏錯過了什麼?
*引文:Wolfram Alpha
您正在移超出long
(64位)的長度。 108佔用7位,所以108L << 60L
需要67位來正確表示它。實際上,由於它是一種簽名類型,因此您需要68位來避免將其解釋爲負數。
好的謝謝。我錯過了。 – bgroenks 2012-04-08 04:53:42
108是7位,所以< < 60是67位數。
嗯......「長」能容納的最大價值是多少? – Mysticial 2012-04-08 04:41:08
我相信它在四倍數? – bgroenks 2012-04-08 18:15:03