經常使用的JavaScript位操做(Bitwise)

位操做

JavaScript中的數字都按照IEEE-754(Institute of Electrical and Electronics Engineers)標準以64位格式存儲。在位操做中,數字被轉換爲有符號32位格式。每次運算符會直接操做該32位數以獲得結果。雖然須要轉換,但這個過程與JavaScript其餘數學運算和布爾操做相比要快不少。javascript

  • Bitwise AND 按位與

兩個操做數的對應位都是1時,則在該位置返回1。java

  • Bitwise OR 按位或

兩個操做數的對應位只要一個爲1時,則在該位返回1。數組

  • Bitwise XOR 按位異或

兩個操做數的對應位只有一個爲1,則在該位返回1。code

  • Bitwise NOT 按位取反

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

顏色交替

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的冪it

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
}
相關文章
相關標籤/搜索