为什么(字节)400000和(字节)-400000结果-128

Fel*_*lix 2 java byte casting twos-complement

在Java中,为什么(字节)400000和(字节)-400000都有结果-128?

实际上,我遵循/sf/answers/635996651/的计算方法

例如:400000 Binary:1100001101010000000 Trim to 8 digits:10000000由于最左边的数字是1,所以-1从它:01111111然后反转它:10000000结果:-128

例如:-400000二进制:-1100001101010000000修剪到8位:10000000由于最左边的数字是1,所以-1从它:01111111然后反转它:10000000结果:128

相同的方法适用于(短)40000 = -25536(短)-40000 = 25536

icz*_*cza 5

转换intbyte将保留int号的最后8位(最后一个字节).

 400000 = 0x61a80
-400000 = 0xfff9e580
Run Code Online (Sandbox Code Playgroud)

你的两个数字都有相同的最后8位:0x80这是-12的补码.

例如:

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)
Run Code Online (Sandbox Code Playgroud)