常用的JavaScript位操作(Bitwise)

joriewong發表於2018-06-06

位操作

JavaScript中的數字都按照IEEE-754(Institute of Electrical and Electronics Engineers)標準以64位格式儲存。在位操作中,數字被轉換為有符號32位格式。每次運算子會直接操作該32位數以得到結果。雖然需要轉換,但這個過程與JavaScript其他數學運算和布林操作相比要快很多。

  • Bitwise AND 按位與

兩個運算元的對應位都是1時,則在該位置返回1。

  • Bitwise OR 按位或

兩個運算元的對應位只要一個為1時,則在該位返回1。

  • Bitwise XOR 按位異或

兩個運算元的對應位只有一個為1,則在該位返回1。

  • Bitwise NOT 按位取反

遇0則返回1,反之亦然。

顏色交替

32位數字的二進位制底層表示,偶數的最低位是0,奇數的最低位是1。如果此數為偶數,和1按位與的結果是0;如果此數為奇數,和1按位與的結果是1。可以使用該方法實現顏色交替,效率可能會比純數學運算(如,取模)快50%。

    for (let i = Things.length - 1; i >= 0; i--) {
        if(i & 1) {
            className = 'oddColor';
        }else {
            className = 'evenColor';
        }
    }
複製程式碼

位掩碼

位掩碼用於處理同時存在多個布林選項的情形。使用單個數字的每一位來判定選項是否成立,從而有效地把數字轉換為由布林值標記組成的陣列。掩碼中的每個選項的值都等於2的冪

const OPTION_A = 1;
const OPTION_B = 2;
const OPTION_C = 4;

const options  = OPTION_A | OPTION_B;

// 選項A是否在options中
if(options & OPTION_A) {
    // code here
}
// 選項A是否在options中
if(options & OPTION_B) {
    // code here
}
// 選項A是否在options中
if(options & OPTION_C) {
    // code here
}
複製程式碼

相關文章