Java中的Shift运算符

前端之家收集整理的这篇文章主要介绍了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

猜你在找的Java相关文章