gpt4 book ai didi

java - java中的字节掩码

转载 作者:行者123 更新时间:2023-11-29 05:24:37 26 4
gpt4 key购买 nike

有些东西我很难理解,我有这段代码:

public class HelloWorld{

public static int readByte(byte b) {
return b & 0xFF;
}

public static short readShort(byte[] b) {
return (short)(readByte(b[0]) | readByte(b[1]) << 8);
}

public static void main(String []args){
byte[] b = {(byte)0x94, 0x00};
System.out.println(readShort(b));

}
}

现在返回的结果是 148,但我不明白为什么如果我删除屏蔽“& 0xFF”,结果会改变,如果你一次读取 1 个字节,0xFF 的屏蔽不假设影响字节(这是我至少知道的),我的一个 friend 试图向我解释这一点,他说这与未签名的字节“0x94”和 readByte 方法中正在进行的转换有关,但我无法理解我真的很难理解为什么你需要屏蔽才能正确读取字节,在此先感谢任何试图帮助我的人!

最佳答案

一个字节是有符号的数据。所以 0x94 是 -108。当您将它作为 int 返回时,您返回扩展为 4 个字节的 -108,这不是 0x94(它的 FFFFFF94)。这显然搞砸了你后来的 ORing。掩码修复了它,因为字节 0x94 在与 0xFF 进行与运算之前被转换为 int,因此 AND 将从负扩展中删除那些额外的 1。

关于java - java中的字节掩码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23164012/

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