微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Java中的Shift运算符

参见英文答案 > Why does Java mask shift operands with 0x1F?2个
移位运算符如何<<当移位位的值大于数据类型的总位数时工作? 例如,
int i = 2; 
int j = i<<34;
System.out.println(j);

整数的大小是32位,但是我们正在移位34位.这是如何运作的?

解决方法

使用<<转换整数时或>>运算符和换档距离大于或等于32,你采取换档距离mod 32(换句话说,你屏蔽除了移位距离的低5位以外的所有距离).

这可能非常违反直觉.例如(i>>> 32)== i,对于每个整数i.您可能希望它将整个数字向右移动,正输入返回0,负输入返回-1,但不是;它只是返回i,因为
(i<(<(32& 0x1f))==(i << 0)== i. 回到原来的问题,(i<< 33)==(i<<(&(&(0x& 0x1f))
==(i << 1).如果你愿意,你可以用二进制做整件事.二进制270是:0000 0000 0000 0000 0000 0001 0000 1110向右移动1,
你得到:0000 0000 0000 0000 0000 0000 1000 0111这是135.

但是,在你的头脑中解决这个问题的更好方法是完全免除二进制文件.
i>>的值s是floor(i / 2< sup> s< / sup>)(其中s已被屏蔽掉,因此它小于32).那么,270<< 1 =楼层(270/2)= 135. http://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.19

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐