gpt4 book ai didi

java - Bitwise AND, Bitwise Inclusive OR 问题,在 Java 中

转载 作者:搜寻专家 更新时间:2023-10-30 21:45:45 25 4
gpt4 key购买 nike

我在一个项目中有几行代码,我看不到...的值(value)

buffer[i] = (currentByte & 0x7F) | (currentByte & 0x80);

它从文件中读取文件缓冲区,以字节形式存储,然后传输到缓冲区[i],如图所示,但我不明白总体目的是什么,有什么想法吗?

谢谢

最佳答案

正如其他答案所述,(currentByte & 0x7F) | (currentByte & 0x80) 等同于 (currentByte & 0xFF)。 JLS3 15.22.1说这被提升为 int:

When both operands of an operator &, ^, or | are of a type that is convertible (§5.1.8) to a primitive integral type, binary numeric promotion is first performed on the operands (§5.6.2). The type of the bitwise operator expression is the promoted type of the operands.

因为 JLS3 5.6.2表示当 currentByte 的类型为 byte 并且 0x7F 是一个 int (就是这种情况),那么两者操作数被提升为 int

因此,buffer 将是元素类型为 int 或更宽的数组。

现在,通过对 int 执行 & 0xFF,我们有效地将原始 byte 范围 -128..127 映射到无符号范围0..255,例如 java.io 流经常使用的操作。

您可以在以下代码片段中看到这一点。请注意,要了解此处发生的情况,您必须知道 Java 将整数类型(char 除外)存储为 2's complement。值(value)观。

byte b = -123;
int r = b;
System.out.println(r + "= " + Integer.toBinaryString(r));
int r2 = b & 0xFF;
System.out.println(r2 + "= " + Integer.toBinaryString(r2));

最后,对于一个真实世界的例子,查看 java.io.ByteArrayInputStreamread 方法的 Javadoc 和实现:

/**
* Reads the next byte of data from this input stream. The value
* byte is returned as an <code>int</code> in the range
* <code>0</code> to <code>255</code>. If no byte is available
* because the end of the stream has been reached, the value
* <code>-1</code> is returned.
*/
public synchronized int read() {
return (pos < count) ? (buf[pos++] & 0xff) : -1;
}

关于java - Bitwise AND, Bitwise Inclusive OR 问题,在 Java 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/560956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com