js中的位運算符 ,按位操作符


 按位操作符(Bitwise operators) 將其操作數(operands)當作32位的比特序列(由0和1組成),而不是十進制、十六進制或八進制數值。例如,十進制數9,用二進制表示則為1001。按位操作符操作數字的二進制形式,但是返回值依然是標准的JavaScript數值。

 

位運算符 名稱 js內使用方式  操作作用 應用舉例
 & 按位與  a & b 對每對比特位執行與(AND)操作。只有兩者互相對應的比特位都是 1 時,a & b的對應比特位才是 1   a&1 判斷一個整數的奇偶
| 按位或 a | b 對每一對比特位執行或(OR)操作。如果兩者互相對應的比特位中都至少有一個是 1,則a | b的對應比特位是 1。

 a|1 把這個數強行變成最接近的偶數;

將任一數值 x 與 0 進行按位或操作,其結果都是 x;

將任一數值 x 與 -1 進行按位或操作,其結果都為 -1

^ 按位異或 a ^ b 對每一對比特位執行異或(XOR)操作。如果兩者互相對應的比特位都不同,則a ^ b的對應比特位是 1。 兩次異或同一個數最后結果不變 (a ^ b) ^ b = a
~ 按位取反 ~a

對每一個比特位執行非(NOT)操作。NOT a  結果為 a 的反轉(即反碼);

即把0和1全部取反 

if (~str.indexOf(searchFor))

{
// searchFor 包含在字符串中
}

else

{
// searchFor 不包含在字符串中
}

 
<< 左移 a << b
將 a 的二進制形式向左移 b (< 32) 比特位,右邊用0填充。
 
>>  帶符號右移  a >> b 將 a 的二進制表示向右移 b (< 32) 位,丟棄被移出的位。  相當於a除以2的b次方(取整) 
>>>  無符號右移  a>>> b  將 a 的二進制表示向右移 b (< 32) 位,丟棄被移出的位,並使用 0 在左側填充。  

 

自動化掩碼創建

function createMask () {
    var nMask = 0, nFlag = 0, nLen = arguments.length > 32 ? 32 : arguments.length;
    for (nFlag; nFlag < nLen; nMask |= arguments[nFlag] << nFlag++);
    return nMask;
}
var mask1 = createMask(true, true, false, true); // 11, i.e.: 1011
var mask2 = createMask(false, false, true); // 4, i.e.: 0100
var mask3 = createMask(true); // 1, i.e.: 0001
// etc.

alert(mask1); // 打印 11

逆算法:從掩碼得到布爾數組

function arrayFromMask (nMask) {
    // nMask 必須介於 -2147483648 和 2147483647 之間
    if (nMask > 0x7fffffff || nMask < -0x80000000) {
        throw new TypeError("arrayFromMask - out of range");
    }
    for (var nShifted = nMask, aFromMask = []; nShifted;
    aFromMask.push(Boolean(nShifted & 1)), nShifted >>>= 1);
    return aFromMask;
}

var array1 = arrayFromMask(11);
var array2 = arrayFromMask(4);
var array3 = arrayFromMask(1);

alert("[" + array1.join(", ") + "]");
// 打印 "[true, true, false, true]", i.e.: 11, i.e.: 1011

 

參考:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM