关于java中byte无符号右移 >>>

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();
	}
	
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值