java非,或与和三种移位运算

~|&^对应着按位非、或、与、异或,比较简单,就是用补码(正数补码为原码,负数为反码加1)每一位对齐,进行运算。比如5&9结果是1,因为5就是二进制101,9是1001(前面几位是0省略),5|9同理则为12。如果是求~ -5的话,首先-5对应二进制原码100000...101求得反码(源码除了第1位符号位外其他位置取反)得到111111...010,补码为1111....011,进行位异或后,取反后得到00000...100得到结果为4。


java一般有<<(左移),>>(右移)和>>>(无符号右移)三种,<<是在后面补0,前面溢出的不要管,扔掉即可,比如-5对应111...(29个1)011,移动后变成111..(27个1)01100,即结果为-5<<2变成-20 。 而>>就是用符号位补充高位,左边溢出的扔掉,这样子-5>>2就变成11.....(31个1)0,换成十进制就是-2了。而>>>就是总以0补充最高位,所以-5>>>2会输出1073748xxx....。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值