--- title: 位元運算子 slug: >- conflicting/Web/JavaScript/Guide/Expressions_and_Operators_11969cb29fead65c26360f554426c217 translation_of: Web/JavaScript/Guide/Expressions_and_Operators translation_of_original: Web/JavaScript/Guide/Obsolete_Pages/Operators/Bitwise_Operators original_slug: Web/JavaScript/Obsolete_Pages/Obsolete_Pages/Obsolete_Pages/運算子/位元運算子 ---
位元運算子把他們的運算元視為一組 32 位元的集合(零或一),而非十進制、十六進制、八進制。例如,十進制數 9 的二進制表示法為 1001。位元運算子對這些二進制表示法進行運算,並返回標準的 JavaScript 數值。
下表解說 JavaScript 的位元運算子。
運算子 | 用法 | 說明 |
---|---|---|
位元 AND | a & b | 每一個對應至同一位元位置的兩個運算元兩者為 1 時,返回 1。 |
位元 OR | a | b | 每一個對應至同一位元位置的兩個運算元兩者或其中一者為 1 時,返回 1。 |
位元 XOR | a ^ b | 每一個對應至同一位元位置的兩個運算元其中一者而非兩者為 1 時,返回 1。 |
位元 NOT | ~ a | 反轉運算元的位元。 |
左移 | a << b | 往左移動 a 的二進制表示法 b 位元,從右邊補 0。 |
維持符號右移 | a >> b | 往右移動 a 的二進制表示法 b 位元,丟棄移出的位元。 |
填 0 右移 | a >>> b | 往右移動 a 的二進制表示法 b 位元,丟棄移出的位元,並從左邊補 0。 |
表 3.5: 位元運算子
大致上,位元邏輯運算子的運作如下︰
舉個例子,9 的二進制表示法是 1001,15 的二進制表示法是 1111。因此,當位元的運算子套用到這些值上時,結果如下︰
位元位移運算子有兩個運算元︰第一個是被移動的數值,第二個指定第一個運算元要移動的位元位置的數目。位移運算元的方向是以使用的運算元來控制。
位移運算子轉換這些運算元為 32 位元整數,並返回與左邊運算元同類型的結果。
位移運算子列於下表。
運算子 | 說明 | 範例 |
---|---|---|
<<(左移) | 這個運算子把第一個運算元向左移動指定的位元數。丟棄向左移出的多餘位元。從右邊填補 0 的位元。 | 9<<2 的結果是 36,因為 1001 向左移動 2 位元而變成 100100,此即 36。 |
>>(維持符號右移) | 這個運算子把第一個運算元向右移動指定的位元數。丟棄向右移出的多餘位元。從左邊填補在最左邊複製的位元。 | 9>>2 的結果是 2,因為 1001 向右移動 2 位元而變成 10,此即 2。同樣的,-9>>2 的結果是 -3,因為保留了正負號。 |
>>>(填 0 右移) | 這個運算子把第一個運算元向右移動指定的位元數。丟棄向右移出的多餘位元。從右邊填補 0 的位元。 | 19>>>2 的結果是 4,因為 10011 向右移動 2 位元而變成 100,此即 4。對於非負數而言,補 0 右移和維持符號右移的結果相同。 |
表 3.6: 位元位移運算子
{{ PreviousNext("Core_JavaScript_1.5_教學:運算子:算術運算子", "Core_JavaScript_1.5_教學:運算子:邏輯運算子") }}
{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Operators/Bitwise_Operators", "es": "es/Gu\u00eda_JavaScript_1.5/Operadores/Operadores_sobre_bits", "fr": "fr/Guide_JavaScript_1.5/Op\u00e9rateurs/Op\u00e9rateurs_bit-\u00e0-bit", "ja": "ja/Core_JavaScript_1.5_Guide/Operators/Bitwise_Operators", "ko": "ko/Core_JavaScript_1.5_Guide/Operators/Bitwise_Operators", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Operatory/Operatory_bitowe" } ) }}