java移位_java移位操作

int value = Integer.parseInt(“00001111101001011111000010101100″,2);//即value=262533292

对int变量value执行<<32位操作,即value <<=32,这个结果是多少呢?

如果你觉得答案是0,那么错了,它的结果还是262533292。

不用怀疑java中int是32位的问题,而是你没有了解java的<

在java中无论左移右移,会遵循下面的规则

value<=0) 等价于 value<

value>>n (其中value为int,n>=0) 等价于 value>>(n%32)

value>>>n (其中value为int,n>=0) 等价于 value>>>(n%32)

对于long类型的:

value<=0) 等价于 value<

value>>n (其中value为long,n>=0) 等价于 value>>(n%64)

value>>>n (其中value为long,n>=0) 等价于 value>>>(n%64)

而对于byte、short、char遵循int的规则

二、

int value = Integer.parseInt(“00001111101001011111000010101100″,2);//即value=262533292

value <<= -38,这个结果是多少呢?

你可能认为它通不过编译,抑或你认为它从左移变成右移了?

然而,事实不是想象的那么简单,它的结果是-1342177280,这是怎么出来的?听我一一道来。

若是对int的值移负数位,java会截取那个负数的低5位。

-38的二进制表示是:11111111111111111111111111011010,截取低5位得:11010,这个数是26,也就是说:

value <<= -38 等价于 value <<= 26,得到的二进制是10110000000000000000000000000000,首位为1,

所以该二进制是补码,换成其绝对值的源码为01010000000000000000000000000000,对应的十进制为1342177280,

加上负号就是-1342177280。

对于int是取低5位,对于long是取低6位

也就是说:

value << -n(value为int,n>=0) 等价于 value << (-n & 31)

value >> -n(value为int,n>=0) 等价于 value >> (-n & 31)

value >>> -n(value为int,n>=0) 等价于 value >>> (-n & 31)

而对于long

value << -n(value为long,n>=0) 等价于 value << (-n & 63)

value >> -n(value为long,n>=0) 等价于 value >> (-n & 63)

value >>> -n(value为long,n>=0) 等价于 value >>> (-n & 63)

而对于byte、short、char遵循int的规则

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值