Java:将 int 转换为字节时,二的补码是如何工作的?

Java: How does two's complement work when casting an int to a byte?

提问人:mishar 提问时间:9/29/2019 更新时间:9/29/2019 访问量:230

问:

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

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

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

140 是二进制的10001100,而我收集到的二进制补码是二进制的。在二进制中,10001100如何成为输出 -116 所需的二元补码二进制值?

二进 字节 进制补

评论

1赞 Tim Biegeleisen 9/29/2019
什么是“2's Complement”的可能副本?
0赞 mishar 9/29/2019
好吧,我已经看过什么是 2 的补码,但我还没有找到任何关于它与选角的关系。我找到了一种笨拙的方法来做到这一点,但我不确定。140 以二进制形式10001100。将其转换为一个字节,它的值太大了。因此,对除最高阶位以外的所有位执行 2 补码得到 1110100,即 -116。但我不确定为什么会这样做,或者即使这是执行的。它似乎只是在这种情况下起作用。

答: 暂无答案