将字节提升为int或long

Rop*_*Rop 0 java int byte types bit

如果我有一个字节值,00101011并且我想将其表示为int值,我有:00000000000000000000000000101011,对我来说似乎很清楚.我有字节值的问题11010100,因为int表示11111111111111111111111111010100.我不知道它来自哪里.有人可以向我解释扩展字节值到int的想法吗?

rge*_*man 8

byte11010100表示负数(-44),因为设置了最高有效位.当这经历了原始的加宽转换时,它仍然必须在二进制补码表示中表示相同的负值.这是使用符号扩展完成的.这意味着所有新位都与原始符号位相同.

                           11010100 => -44
11111111 11111111 11111111 11010100 => -44
Run Code Online (Sandbox Code Playgroud)

如果没有发生这种情况,则符号位将不再是符号位,并且它将被解释为"正常",并且该值将不再相同.

00000000 00000000 00000000 11010100 => 212
Run Code Online (Sandbox Code Playgroud)