Binary Java:two';将int转换为字节时,补码的作用是什么?

Binary Java:two';将int转换为字节时,补码的作用是什么?,binary,byte,twos-complement,Binary,Byte,Twos Complement,我有一个问题,当把一个int转换成一个字节时,2的补码是如何工作的。例如,当强制转换一个值介于127和256之间的int时,我得到的是负值,我想了解它是如何得到的。我得到高阶位被抛出,所以256和512之间的任何值都会导致字节变量保持int值减去256;但我很好奇如何计算二进制中的负值 例如,我很好奇下面的代码是如何工作的: int i = 140; byte b = (byte) i; System.out.println(b); // outputs -116 140是10

我有一个问题,当把一个int转换成一个字节时,2的补码是如何工作的。例如,当强制转换一个值介于127和256之间的int时,我得到的是负值,我想了解它是如何得到的。我得到高阶位被抛出,所以256和512之间的任何值都会导致字节变量保持int值减去256;但我很好奇如何计算二进制中的负值

例如,我很好奇下面的代码是如何工作的:

int i = 140;    
byte b = (byte) i;    
System.out.println(b); // outputs -116

140是10001100的二进制数,从我收集的数据来看,是2的补码二进制数。在二进制中,10001100是如何成为输出-116所需的二元补码二进制值的?

可能的重复。我已经研究了什么是二元补码,但我没有发现它与铸造的关系。我已经找到了一个简陋的方法,但我不确定。140是二进制的10001100。将其转换为一个字节,值太大。因此,对除最高阶位之外的所有位执行2的补码将产生1110100,即-116。但我不知道为什么会这样,甚至不知道这是不是这样。在这种情况下,它似乎只起作用。