java中6左移2怎么算_二进制左移或者右移负数位,比如6>>>-2,二进制应该怎么变化?...

6>>>-2相当于6>>>30

因为6是int类型的,4byte,32bit,二进制表达为0x00000006

无符号右移-2相当于右移(32+(-2))==30

如果这里是16进制的数,比如0xFFFFFFFFFFFFFFFFL(-1的二进制补码形式,补码不懂的自行百度)

那么右移-2就应该等于右移62(64+(-2)),64的意思是long是8byte,64bit

下面就是对于移位的测试代码

public class BitSetTest {

public static void main(String[] args) {

/**

* 返回 11111111111111111111111111111111

*/

System.out.println(Integer.toBinaryString(-1));

/**

* 返回 11111111111111111111111111111100

* 右边空位用0补齐

*/

System.out.println(Integer.toBinaryString(-1 << 2));

/**

* 返回 11111111111111111111111111111111

* 这里还是返回-1,因为>>有符号,前面空的用1补齐

*/

System.out.println(Integer.toBinaryString(-1 >> 10));

/**

* 返回 1111111111111111111111

* 无符号右移前面用0补齐

*/

System.out.println(Integer.toBinaryString(-1 >>> 10));

/**

* 下面两个都返回true

*/

System.out.println(Integer.toBinaryString(-1 >>> -2).

equals(Integer.toBinaryString(-1 >>> 30)));

System.out.println(Long.toBinaryString(0xFFFFFFFFFFFFFFFFL >>> -2).

equals(Long.toBinaryString(0xFFFFFFFFFFFFFFFFL >>> 62)));

}

}

楼上 @胡星宇 的答案-2应该是0xFFFFFFFE(补码)而不是0xFFFE。

懂了没?

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值