Java位操做

一、判斷奇數偶數

if(n & 1 == 1){
    // n 是個奇數。
}

二、交換兩個數

x = x ^ y  
y = x ^ y   
x = x ^ y

代替html

int tmp = x;
x = y;
y = tmp;

三、找出惟一沒有重複的數

數字 一、二、二、一、三、三、四、五、4中找出只出現過1次的數java

一道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;
    }

四、位運算代替乘除法

//a = a / 2
a<<=1;
//a = a * 2
a>>=1;

參考文檔

[1]: <a href="https://mp.weixin.qq.com/s/03gQigIamTgjdxVrLRACNg" target="_blank">【算法技巧】位運算裝逼指南</a> [2]: <a href="https://www.cnblogs.com/jimoer/p/10787672.html" target="_blank">有助於改善性能的Java代碼技巧</a> [3]: <a href="https://fang-cheng.iteye.com/blog/2441007" target="_blank">實用 | 35個能夠提升千倍效率的Java代碼小技巧</a>性能

相關文章
相關標籤/搜索