--- 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" } ) }}