将int转换为byte

时间:2013-11-23 15:32:35

标签: java byte type-conversion

int i = 234;
byte b = (byte) i;
System.out.println(b); // -22
int i2 = b & 0xFF;
System.out.println(i2); // 234

我正在查看此代码,并对如何存储它们的值感到困惑。第一个int存储为32位(4个字节)。 b转换为二进制并存储其有符号值(8位)。 i2是将它存储为8位无符号表示还是将其转换回32位?

3 个答案:

答案 0 :(得分:1)

Java没有无符号的基元类型。所有byte变量都是带符号的8位值。

最高有效位是否被解释为符号位,当您执行逐位操作时,运算符将使用所有存在的位。为了具体化,以下内容是等效的:

i2 = b & 0xFF;
i2 = b & ((byte) -1);

答案 1 :(得分:0)

i2声明为int,因此它应该是一个完整的32位值。它将包含b的二进制AND,在这种情况下是低8位和0xFF。

答案 2 :(得分:0)

事物不会“存储为”未签名或签名的表示。这是一个挑剔的区别,但它似乎是你感到困惑的地方。唯一的区别是如何解释这些位。这里发生的事情如下:

  • i存储值11101010(加上一些高阶字节数)。在Java的整数存储格式约定下,这表示值234。
  • b存储值11101010,因为int只需截断它们即可转换为byte。在Java的数字字节存储格式约定下,这表示值-22。
  • i2存储值11101010(加上一些高阶字节数),因为按位操作应用于b,因此直接复制了它的位。 (如果你写了int i2 = bint i2 = b + 0,该字节将被转换为其数值-22,然后存储为-22的int表示。