將乙個整數的二進位制格式進行運算。
在js中如果乙個數字進行位運算,那麼先將這個數字轉換為整數,並且是32位整數儲存格式。(與js本身採用雙精度64位儲存略有不同)
nan、infinity、-infinity轉換為0與運算 &
運算規則:兩個整數比較,如果都為1則結果為1,否則為0。
或運算 |
運算規則:兩個整數進行比較,如果有一位為1,則結果為1,否則為0。
非/否運算 ~
運算規則:將該整數的按位取反
非運算快捷方法:-(非運算的數字) - 1
~1 = -1 - 1 = 0
~2 = -2 - 1 = -3
非運算應用-快速取整優勢:位運算的執行速度非常快取整方法:~~數字
~~1.333 = 1
~~8.9 = 8
異或運算 ^
兩個整數進行比較,相同取0,不同取0。
異或運算應用-交換變數
交換a、b
例1:只用加減
var a = 1, b = 2;
a = a + b;
b = a - b; // b = a
a = a - b;
例2:異或運算
var a = 2, b = 3;
a = a ^ b;
b = a ^ b;
a = a ^ b;
有這樣乙個許可權物件,如下:
var power =
新增許可權 |
原理解釋:每乙個許可權只佔一位且唯一,做或運算就會給對應的位上賦值為1(因為該運算的特性就是有1為1)
// 001 | 010 => 011 => 3
var p = power.read | power.write;
console.log(p) // 3
檢視許可權 &
原理解釋:同1為1,只有對應的位上有該許可權才會返回1,否則都會為0
// 011 & 001 => 001 => 1
p & power.read ? console.log('read') : console.log('no read'); // read
// 001 & 010 => 010 => 2
p & power.write ? console.log('write') : console.log('no write'); // write
// 011 & 100 => 000 => 0
p & power.modifiy ? console.log('modifiy') : console.log('no modifiy'); // no modifiy
刪除許可權 ^
原理解釋:先加上對應的許可權,在進行去除,這是為了防止之前沒有這個許可權,導致與運算結果錯誤
// 011 | 100 => 010
p = p | power.read ^ power.read;
console.log(p) // 2
右移相當於當前數字除2 有溢位的風險左移
相當於當前數字乘2
JS 位運算子
在js中有 等位運算子。在對乙個數值使用位運算子時,js會先將數值轉換為二進位制,然後進行位運算。在js中對乙個數值轉進行二進位制轉換,會得到乙個長度為32位的二進位制數,通常第乙個為1的位之前所有為0的為在表示時可以省略。常見位運算子使用方法有下列幾種 非,a 即 將a的二進位製碼的每一位 32位...
js位運算子
我們可能很少在程式設計中用位運算,如果沒深入學習,可能也很難理解。平時的數值運算,其實是要先轉換成二進位制再進行運算的,而位運算就是直接進行二進位制運算,所以位運算的執行效率肯定是更高的。下面通過一些例項來加深對位運算的理解。運算子我們都知道,只有兩個都為真,結果才為真。道理是一樣的,只有兩個數的值...
JS中的邏輯運算子 ,位運算子 ,
1 js中的 符號 運算方法 只要 前面為false,不管 後面是true還是false,都返回 後面的值。只要 前面為true,不管 後面是true還是false,都返回 前面的值。總結 真前假後 2 js中的 符號 運算方法 只要 前面是false,無論 後面是true還是false,結果都將返...