Java位操作
1、判断奇数偶数
if(n & 1 == 1){
// n 是个奇数。
}
2、交换两个数
x = x ^ y
y = x ^ y
x = x ^ y
代替
int tmp = x;
x = y;
y = tmp;
3、找出唯一没有重复的数
数字 1、2、2、1、3、3、4、5、4中找出只出现过1次的数
一道LeetCode题解,从数组中找出出现过1次的数,已知这样的数有2个。
首先先获得者两个数相异或的结果,再找出最低位对应的数值mask,再通过&操作,将数组中的数分成两组,同组数之间再进行异或,得出结果。
public static int[] singleNumbers(int[] nums) {
// 4 1 4 6
int[] rst = new int[2];
int len = nums.length;
if (len == 2) {
return nums;
}
// 获取出现过1次的两个数相与后的中间值mid = a1 ^ a2
int mid = 0;
for (int num : nums) {
mid = mid ^ num;
}
// 获取mid中最低位1对应的数值mask
int mask = mid & (mid * (-1));
for (int num : nums) {
if ((num & mask) == 0) {
rst[0] ^= num;
} else {
rst[1] ^= num;
}
}
return rst;
}
4、位运算代替乘除法
//a = a / 2
a<<=1;
//a = a * 2
a>>=1;
参考文档
[1]: 【算法技巧】位运算装逼指南
[2]: 有助于改善性能的Java代码技巧
[3]: 实用 | 35个可以提高千倍效率的Java代码小技巧
关于作者
后端程序员,五年开发经验,从事互联网金融方向。技术公众号「清泉白石」。如果您在阅读文章时有什么疑问或者发现文章的错误,欢迎在公众号里给我留言。