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
转换int为byte将保留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)