无符号右移一个负数会得到什么结果?

前言

最近看JDK源码发现代码中竟然会出现无符号右移负数的形式,很有意思。

正文

比如在util包中RegularEnumSet类的第54行:

java.util.RegularEnumSet

class RegularEnumSet<E extends Enum<E>> extends EnumSet<E> {
	...
	void addAll() {
        if (universe.length != 0)
            elements = -1L >>> -universe.length;//第54行
	}
    ...
 }

这行代码实在有趣,我之前从没有想过一个数经过无符号右移负数会是什么结果
为了看结果,我写了如下测试代码:

public class Demo {
	public static void main(String[] args) {
		long l = -1l;
		System.out.println(l>>>-3);
	}
}

上述代码运行的结果是7(二进制:111),而一个64个1的二进制数(-1L),右移61位即可得到111,由此可知右移-3位相当于右移61位。

但具体的规则有待研究,待找到官方解释就贴上来。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值