我正在处理一些将二进制文件作为输入的代码。但是,我在理解代码中的for循环时遇到了麻烦,因为我不了解按位运算符对IFD_Address所做的操作,例如|=<<& 0xff。我认为IFD_Address指向二进制文件中的指针,但是我不确定。这段代码试图实现什么?

byte[] IFD_Address_tmp = Arrays.copyOfRange(bytes, 4, 8);
int IFD_Address = 0;
int i = 0;
int shiftBy = 0;
for (shiftBy = 0; shiftBy < 32; shiftBy += 8) {
    IFD_Address |= ((long) (IFD_Address_tmp[i] & 0xff)) << shiftBy;
    i++;
}

最佳答案

最好通过移动位而不是数字来了解此行为。字节包括八位,整数,32位。循环基本上会占用数组中的每个字节,并将相应的位放在整数IFD_Address中,分为8位,从右(最低有效)到左(最高有效),如下所示:

java - 不了解这些按位运算符如何对字节和整数进行操作-LMLPHP

关于按位运算:


capture the 8 bits into an integer需要& 0xff
<<将位左移以选择IFD_Address中的适当位置;
|=设置IFD_Address中的位。


有关详细信息,请参见this tutorial

关于java - 不了解这些按位运算符如何对字节和整数进行操作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/56694089/

10-11 22:13