Join MDN and developers like you at Mozilla's View Source conference, 12-14 September in Berlin, Germany. Learn more at https://viewsourceconf.org

位元運算子

 

 

位元運算子

位元運算子把他們的運算元視為一組 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: 位元運算子

位元邏輯運算子

大致上,位元邏輯運算子的運作如下︰

  • 運算元轉換成 32 位元整數,並表示為一系列的位元(0 或 1)。
  • 第一個運算元的每一個位元與第二個運算元對應的位元結成配對︰第一個位元對第一個位元、第二個位元對第二個位元,餘類推。
  • 運算子套用到每一對位元,運算結果以位元構成。

舉個例子,9 的二進制表示法是 1001,15 的二進制表示法是 1111。因此,當位元的運算子套用到這些值上時,結果如下︰

  • 15 & 9 的結果是 9 (1111 & 1001 = 1001)
  • 15 | 9 的結果是 15 (1111 | 1001 = 1111)
  • 15 ^ 9 的結果是 6 (1111 ^ 1001 = 0110)

位元位移運算子

位元位移運算子有兩個運算元︰第一個是被移動的數值,第二個指定第一個運算元要移動的位元位置的數目。位移運算元的方向是以使用的運算元來控制。

位移運算子轉換這些運算元為 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: 位元位移運算子

文件標籤與貢獻者

 此頁面的貢獻者: teoli, happysadman
 最近更新: teoli,