【发布时间】:2016-02-24 08:42:17
【问题描述】:
我正在研究java。 我想知道为什么 java 会产生这个输出。 我在这里分享代码。
public class vvn {
public static void main(String[] args)
{
byte [] arr = new byte[4];
arr[0] = (byte)157;
arr[1] = 1;
arr[2] = 0;
arr[3] = 0;
System.out.format("read 0x%x 0x%x 0x%x 0x%x \n",arr[3],arr[2],arr[1],arr[0]);
int v = (arr[0] | (arr[1] << 8) | (arr[2] << 16) | (arr[3] << 24));
System.out.format("read 0x%x\n",v);
}
}
我得到的输出为
read 0x0 0x0 0x1 0x9d
read 0xffffff9d
我预计输出应该是 0x0000019d
【问题讨论】:
-
来自 java doc byte:byte 数据类型是一个 8 位有符号二进制补码整数。它的最小值为 -128,最大值为 127(含)。 byte 数据类型可用于在大型数组中节省内存,其中内存节省实际上很重要。它们也可以用来代替 int ,它们的限制有助于澄清您的代码;变量的范围有限这一事实可以作为一种文档形式。
-
基本上我是从一个文件中读取的,使用数据输入流每 1 个字节读取 4 次。有什么办法可以做到这一点。我优先考虑字节序
-
@wn 读取一个整数然后调用
Integer.reverseBytes(x);
标签: java byte-shifting