Java中int/Integer的掩码操作原理及byte无符号转换疑问
关于Java中byte无符号掩码操作的疑问
Java中的byte是有符号类型,为了获取它对应的无符号整数值,我们通常会使用0xFF进行掩码操作,示例如下:
byte signed = -1; // 对应二进制:0b11111111 int unsigned = signed & 0xFF; // 运算:0b11111111 & 0b11111111 System.out.println("unsigned: " + unsigned); // 输出255而非-1
但当把这个无符号int强制转换回byte时,结果又变回了最初的有符号值:
byte resigned = (byte) unsigned; System.out.println("resigned: " + resigned); // 和初始的signed值一致,输出-1
再看另一个测试案例:
byte signed = -44; // 对应二进制:0b11010100 int unsigned = signed & 0xFF; // 运算:0b11010100 & 0b11111111,结果仍为0b11010100 byte resigned = (byte) unsigned; System.out.println("resigned: " + resigned); // 和signed值一致,输出-44
从这些例子能看到,为得到无符号int而进行的掩码操作,并没有改变byte原本的二进制值。那么核心疑问是:掩码操作究竟是对整数的byte部分数值产生了实际改变,还是仅仅告知javac该如何处理这个整数?
内容的提问来源于stack exchange,提问作者linker
相关产品推荐
相关产品推荐

