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

在Java中的右移

发布时间:2020-12-15 05:11:22 所属栏目:Java 来源:网络整理
导读:我只是坚持这个小逻辑,我没有做对 int是32位,所以假设二进制20就像 // 00000000000000000000000000010100 ..现在如果我执行右移操作说4 int a = 204; // 00000000000000000000000000000001 ..结果是1 现在说我再次拿20并做5次右移操作 int b = 205; //000000
我只是坚持这个小逻辑,我没有做对

int是32位,所以假设二进制20就像

// 00000000000000000000000000010100

..现在如果我执行右移操作说4

int a = 20>>4;   
// 00000000000000000000000000000001

..结果是1

现在说我再次拿20并做5次右移操作

int b = 20>>5;  //00000000000000000000000000000000

..结果是0

现在,如果我做了32次右移…为什么我得到的数字与我指定的相同.

int c = 20>>32; //how does this prints 20 again??

System.out.println("right shift 4= "+a+"n right shift 5= "+b+"right shift 32 = "+c);

所以我期待的是在5班之后.任何班次都应该导致结果为0 ..但是在32班次为什么我要回到指定值?

解决方法

JLS 15.19.移位运算符

如果左侧操作数的提升类型是int,则只使用右侧操作数的五个最低位作为移位距离.就好像右手操作数受到按位逻辑AND运算符& (§15.22.1),掩码值为0x1f(0b22222).因此,实际使用的移位距离始终在0到31的范围内,包括0和31.

如果左侧操作数的提升类型很长,则只使用右侧操作数的六个最低位作为移位距离.就好像右手操作数受到按位逻辑AND运算符& (§15.22.1),掩码值为0x3f(0b222221).因此,实际使用的移位距离始终在0到63的范围内,包括0和63

(编辑:李大同)

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

    推荐文章
      热点阅读