Java位运算符使用技巧

一、判断奇偶数
//偶数
a & 1 = 0  
//奇数
a & 1 = 1 

我们可以利用 & 运算符的特性,来判断二进制数第一位是0还是1。
用if ((a & 1) == 0) 代替 if (a % 2 == 0)来判断a是不是偶数。

二、交换两个数
  • 临时变量法:
int temp = a;
a = b;
b = temp;
  • 使用 ^ 位运算符:
a ^= b;
b ^= a;
a ^= b;

需要了解一下 ^ 的几个特性:
a ^ a = 0
a ^ 0 = a
(a ^ b) ^ c = a ^ (b ^ c)
从数学角度来分析:
第一步:a = a ^ b
第二步:b = a ^ b = (a ^ b) ^ b = a ^ (b ^ b) = a ^ 0 = a
第三步:a = a ^ b = (a ^ b) ^ b = (a ^ a) ^ b = b ^ 0 = b

三、取余

其实取余算法和上面的判断奇偶数原理是一样的。
比如说我们要让a对16进行取余,那么就可以让 a & 15 得出来的结果就是余数。
可以看出15的二进制表示为:
0000 0000 0000 0000 0000 0000 0000 1111
所以 a & 15 返回值就是a二进制的最低四位,也就是

a & 15 = a % 16

使用 & 来进行取余的算法比使用 % 效率高很多,虽然只能对2^n的数值进行取余计算,但是在JDK源码中也是经常被使用到,比如说HashMap中判断key在Hash桶中的位置。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容