在Java中,为什么(字节)400000和(字节)-400000都具有结果-128?
实际上,我遵循https://stackoverflow.com/a/9085666/1037217中的计算方法
例如:400000
二进制:1100001101010000000
修剪至8位数字:10000000
由于最左边的数字是1,因此从-1开始:01111111
然后将其反转:10000000
结果:-128
例如:-400000
二进制:-1100001101010000000
修剪至8位数字:10000000
由于最左边的数字是1,因此从-1开始:01111111
然后将其反转:10000000
结果:128
相同的方法适用于
(短)40000 = -25536
(短)-40000 = 25536
最佳答案
将int
强制转换为byte
将保留int编号的后8位(最后一个字节)。
400000 = 0x61a80
-400000 = 0xfff9e580
您的两个数字的后8位相同:
0x80
,即2的补码中的-1
。例如:
System.out.println((byte)0x23403); // Prints 3 (the last 8 bits: 0x03 = 3)
System.out.println((byte)0x23483); // Prints -125 (last 8 bits: 0x83 = -125)
// (in 2's complement: 0x83 = -(128-3) = -125)