加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Java中的Shift运算符

发布时间:2020-12-14 05:35:22 所属栏目:Java 来源:网络整理
导读:参见英文答案 Why does Java mask shift operands with 0x1F?2个 移位运算符如何当移位位的值大于数据类型的总位数时工作? 例如, int i = 2; int j = i34;System.out.println(j); 整数的大小是32位,但是我们正在移位34位.这是如何运作的? 解决方法 使用转
参见英文答案 > 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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读