在二進制,MAX_VALUE
S代表每種類型的啓動與一0
位並繼續所有的1
位。這意味着,要獲得Integer.MAX_VALUE
,你需要一個0
位後跟隨31 1
位:
Integer.MAX_VALUE: 01111111111111111111111111111111
但是,你不生產這一點。您重複使用Byte.MAX_VALUE
四次。這意味着你有一個0
位後7 1
位,然後是一個0
位後7 1
位等:
Byte.MAX_VALUE: 01111111
Byte.MAX_VALUE×4: 01111111011111110111111101111111 (2,139,062,143)
由於-1
s的單獨的1
位組成,你可以得到你想要什麼一個Byte.MAX_VALUE
跟着三個-1
S:
Byte.MAX_VALUE: 01111111
-1: 11111111
Byte.MAX_VALUE, -1×3: 01111111111111111111111111111111
當您嘗試COMBIN會出現第二個問題這些。當Java將負數byte
轉換爲int
時,它將成爲負數int
,這意味着大量的1
將以二進制形式添加到其左側。因此,您需要使用& 0xff
(或Byte.toUnsignedInt
)從每個byte
中去除這些添加的位。
最好使用|
而不是+
,因爲它更符合更精確的內容。你爲什麼要使用'+'
byte a = Byte.MAX_VALUE;
byte b = -1;
byte c = -1;
byte d = -1;
System.out.println(((a & 0xff) << 24) | ((b & 0xff) << 16) | ((c & 0xff) << 8) | ((d & 0xff) << 0));
:
因此,生產
Integer.MAX_VALUE
? – shmosel您正在打印0x7f7f7f7f。 – VGR
INT_MAX是2147483647和-2147483648因爲0需要一個點 – CSK