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

标签 java bit-manipulation bitwise-operators bit-shift

我正在使用一些接受二进制文件作为输入的代码。但是,我无法理解代码中的 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++;
}

最佳答案

这种行为最好通过移动位来理解,而不是数字。字节由 8 位组成,整数由 32 位组成。该循环基本上获取数组中的每个字节并将相应的位放入整数 IFD_Address 中。以 8 位 block 为单位,从右(最不重要)到左(最重要),如下所示:

enter image description here

关于按位运算:

参见this tutorial了解详情。

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

相关文章:

python - 十六进制数的按位异或

java - 为什么这些按位运算会产生大写字母?

python - 求集合 s = {1, 2, ... n } 中 a & b 的最大值小于某个值 k

java - 带有 jUnit 的测试监听器

c - C 中的位移位

java - 用 Java 计算 Pi

c++ - 整数和位数组之间的按位运算

c - 如何使用按位运算符返回 0 或 1

java - 如何使用 CXF wsdl2java 为在线 WSDL URL 链接生成 WebService 客户端

java - 在整个JFrame上添加 "global"列表器以检查字段更改