按位與 (&)
按位與 (&) 運算子返回一個數字或 BigInt,其二進位制表示中,只有當兩個運算元對應位都為 1 時,該位才為 1。
試一試
const a = 5; // 00000000000000000000000000000101
const b = 3; // 00000000000000000000000000000011
console.log(a & b); // 00000000000000000000000000000001
// Expected output: 1
語法
js
x & y
描述
& 運算子對兩種型別的運算元進行了過載:number 和 BigInt。對於數字,該運算子返回一個 32 位整數。對於 BigInt,該運算子返回一個 BigInt。它首先將兩個運算元強制轉換為數字值並測試它們的型別。如果兩個運算元都變為 BigInt,則執行 BigInt AND;否則,它將兩個運算元轉換為32 位整數並執行數字按位 AND。如果一個運算元變為 BigInt 而另一個運算元變為數字,則丟擲 TypeError。
該運算子以二進位制補碼形式對運算元的位表示進行操作。第一個運算元中的每個位與第二個運算元中的相應位配對:*第一個位*與*第一個位*,*第二個位*與*第二個位*,依此類推。該運算子應用於每對位,結果按位構造。
AND 操作的真值表是
| x | y | x AND y |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
9 (base 10) = 00000000000000000000000000001001 (base 2)
14 (base 10) = 00000000000000000000000000001110 (base 2)
--------------------------------
14 & 9 (base 10) = 00000000000000000000000000001000 (base 2) = 8 (base 10)
超過 32 位的數字將丟棄其最高有效位。例如,以下超過 32 位的整數將被轉換為 32 位整數
Before: 11100110111110100000000000000110000000000001 After: 10100000000000000110000000000001
警告: 你可能會看到有人使用 & -1 來將數字截斷為整數。將任何數字 x 與 -1 進行按位與運算會返回 x 轉換為 32 位整數,這還會刪除超出 -2147483648 到 2147483647 範圍的數字的前導位。請改用 Math.trunc()。
對於 BigInt,沒有截斷。從概念上講,將正 BigInt 理解為具有無限數量的前導 0 位,將負 BigInt 理解為具有無限數量的前導 1 位。
示例
使用按位與
js
// 9 (00000000000000000000000000001001)
// 14 (00000000000000000000000000001110)
14 & 9;
// 8 (00000000000000000000000000001000)
14n & 9n; // 8n
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # prod-BitwiseAND表示式 |
瀏覽器相容性
載入中…