Java中从int到byte的显式转换

Sri*_*osh 0 java type-conversion

我试图将int转换为byte.

int i = 128;
byte b = (byte) i;
Run Code Online (Sandbox Code Playgroud)

我知道-128到127的字节范围以及将整数存储到一个字节的规则是:

byte_value = int_vale%byte_Range; (我发现在完整参考Java中)

当我将它应用于int 128时,它应该是这样的:

byte_value = 128%256 = 128;

但是,它实际上是:-128

我无法理解这背后的实际逻辑.请帮忙!!

rge*_*man 5

铸造byte并不意味着int_value % byte_range.这意味着只有最后8位有效位保留在该byte值中.起初,这似乎意味着相同的事情,但bytes签署.

int128是以下位:

00000000 00000000 00000000 10000000
Run Code Online (Sandbox Code Playgroud)

保留最后8位时,结果如下:

10000000
Run Code Online (Sandbox Code Playgroud)

现在,它中最重要的位byte被解释为-128,而不是+128 int.

该值128溢出a byte,结果为负,因为设置了最高有效位.