JS中的位運算子

2021-09-29 22:11:52 字數 1763 閱讀 7292

將乙個整數的二進位制格式進行運算。

在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,結果都將返...