public static void main(String[] args) {
// 如:我们需要将byte:10001111 右移2位期望得到的结果:00100011
// 我们知道无符号右移,不论符号位是0还是1,高位统统补0;所以我们可能像下面这样写
byte b = (byte) 0b10001111;
System.out.println("原始二进制字符串:" + byte2Str(b));
System.out.println("无符号右移2位二进制字符串:" + byte2Str((byte) (b >>> 2)));
// 结果如下:
// 原始二进制字符串:10001111
// 无符号右移2位二进制字符串:11100011
// 原因是符号位为1时,进行无符号右移之前会将byte转成int: {0b11111111,0b11111111,0b11111111,0b10001111}
// 无符号右移后:{0b00111111,0b11111111,0b11111111,0b11100011}
// 输出低字节时就出现了刚才运行的结果
// 所以当有无符号右移的需求时,我们应该先把参与运算的字节和0xff进行与操作将不参与运算的字节置0 再进行有符号右移即可
System.out.println("无符号右移2位二进制字符串:" + byte2Str((byte) ((b & 0xff) >> 2)));
// 结果如下:
// 无符号右移2位二进制字符串:00100011
}
private static String byte2Str(byte b) {
StringBuilder sb = new StringBuilder();
for (int i = 7; i >= 0; i--) {
int bit = b >> i & 0x01;
sb.append(bit);
}
return sb.toString();
}
关于java中byte无符号右移 >>>
最新推荐文章于 2023-12-11 16:15:53 发布