Есть кое-что, что я изо всех сил пытаюсь понять, у меня есть этот фрагмент кода:
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 не должна влиять на byte (по крайней мере, это то, что я знаю), мой друг пытался объяснить мне это, и он сказал, что это связано с тем, что байт "0x94" не имеет знака, и приведение происходит в методе readByte, но я не мог этого понять, и я Мне действительно трудно понять, почему вам нужна маскировка, чтобы правильно прочитать байт, заранее спасибо всем, кто попытается мне помочь!