java 运算符详解(&,|,^,~,<<,>>,>>>)

位运算

首先要了解二进制,位运算会将十进制的数值转位二进制的数值,然后进行运算。

按位与(&)

在使用按位与计算的过程中,发现 3 & 5 = 1;
那么我就很纳闷了,为什么 3 & 5 会等于1呢?这中间有联系联系和规则?
在将数字3和5都转位2进制之后,就会发现其中的奥妙。
在二进制当中

3 & 5= 0011 & 0101 = 0001;
0001 转为十进制 等于1;

到这里我想细心的同学已经发现了其中的规则,就是将二进制的每一位进行比较,如果两个数字都等于1的情况下,那么对应的位置就为1,否则等于0;
第一位0 & 0 得 0;
第二位0 & 1 得 0;
第三位1 & 0 得 0;
第四位1 & 1 得 1;
组合起来就是0001;

3: 0 0 1 1;
    & & & &
5: 0 1 0 1;
----------------
1: 0 0 0 1;

按位或(|)

按位或运算的过程中,只要其中一个满足1的要求。就可以等于;

例
3 | 5 = 0011 | 0101 = 0111 =7

异或运算符(^)

异或运算过程中,两个位置如果同为1的情况下等于0;其中一位等于1的情况下等于1;
例:

3 ^ 5 = 0011 ^ 0101 = 0110 = 6

左移运算符(<<)

在将十进制数值转位二进制之后,在尾部添加0.

int的占位符石32位,所以如果将0补全的情况下。
1 = 00000000000000000000000000000001
1 << 5 就是将1的右边添加5个0.
左移运算结束后等于00000000000000000000000000100000
这个时候会发现右边增加了5个0 之后,32位的占位符变成了37位。
这个时候,左边开始的5个0将会被丢弃。变成:
00000000000000000000000000100000

# 右移运算符(>>)
右移运算符就是将,头部加0.右移几位加几个0.而尾部丢弃。
例:

1 >> 5 = 00000000000000000000000000000000 00001
空格后面的数字都会被丢弃,得到最终的结果等于0;

右移无符号(>>>)

与右移运算符号的区别,主要是在负数运算的时候有所不同。

十进制数字-1时在1的二进制取反,然后在+1;
1的二进制是00000000000000000000000000000001
取反之后是11111111111111111111111111111110 + 1 = 11111111111111111111111111111111
所以 -1 >>> 5 = 00000111111111111111111111111111 = 134217727
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值