将字节提升为int或long

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

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

  11010100 => -44 11111111 11111111 11111111 11010100 => -44 

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

 00000000 00000000 00000000 11010100 => 212