在二进制,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