【面试题-J2SE】位运算

位运算

一、总结

符号解释例子
&按位与相同位的两个数字都为1,则为1;若有一个不为1,则为0。5&3=1
|按位或相同位只要一个为1即为1。5|3=7
^按位异或相同位不同则为1,相同则为0。5^3=6
~按位取反把内存中的0和1全部取反。~5=-6
<<左移,移一位表示乘25<<1=10
>>右移,移一位表示除以2,(正数高位补0,负数高位补15>>1=2
>>>无符号右移(与>>类似),高位补05>>>1=2

二、详解

1、&:5 & 3 = 0000 0000 0000 0101 & 0000 0000 0011 = 0000 0000 0000 0001 = 1

2、|:5 | 3 = 0000 0000 0000 0101 | 0000 0000 0000 0011 =0000 0000 0000 0111 = 7

3、^:5^3 = 0000 0000 0000 0101 ^ 0000 0000 0000 0011 = 0000 0000 0000 0110 = 6

4、~:~5 = ~(0000 0000 0000 0101) = 1111 1111 1111 1010;-6 = -(0000 0000 0000 0110) = ~(0000 0000 0000 0110) + 1 = 1111 1111 1111 1001 + 1 = 1111 1111 1111 1010;左边等于右边。~5=-6。

5、<<:5 << 1 = (0000 0000 0000 0101) << 1 = 0000 0000 0000 1010 = 10;-5 << 1 = -(0000 0000 0000 0101) << 1 = (~(0000 0000 0000 0101) + 1) << 1 = (1111 1111 1111 1010 + 1) << 1 = 1111 1111 1111 1011 << 1 = 1111 1111 1111 0110;-10 = -(0000 0000 0000 1010) = ~(0000 0000 0000 1010) + 1 = 1111 1111 1111 0101 +1 = 1111 1111 1111 0110

6、>>:5 >> 1 = (0000 0000 0000 0101) >> 1 = 0000 0000 0000 0010 = 2; -5 >> 1 = (-(0000 0000 0000 0101)) >> 1 = (~(0000 0000 0000 0101) + 1) >> 1 = ( 1111 1111 1111 1010 + 1 ) >> 1 = 1111 1111 1111 1011 >> 1 = 1111 1111 1111 1101; -3 = -(0000 0000 0000 0011) = ~(0000 0000 0000 0011) + 1 = 1111 1111 1111 1100 + 1 = 1111 1111 1111 1101;左边等于右边。所以-5>>1 = -3

7、>>>:5 >>> 1 = (0000 0000 0000 0101) >>> 1 = 0000 0000 0000 0010 = 2;-5 >>> 1 = (-(0000 0000 0000 0101)) >>> 1 = (~(0000 0000 0000 0101) + 1) >>> 1 = (1111 1111 1111 1010 + 1 ) >>> 1 = 1111 1111 1111 1011 >>> 1 = 0111 1111 1111 0101 = 2147483645;

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值