JavaScript Bitwise Operations
JavaScript ตัวดำเนินการ Bitwise
Operator | Name | Description |
---|---|---|
& | AND | Sets each bit to 1 if both bits are 1 |
| | OR | Sets each bit to 1 if one of two bits is 1 |
^ | XOR | Sets each bit to 1 if only one of two bits is 1 |
~ | NOT | Inverts all the bits |
<< | Zero fill left shift | Shifts left by pushing zeros in from the right and let the leftmost bits fall off |
>> | Signed right shift | Shifts right by pushing copies of the leftmost bit in from the left, and let the rightmost bits fall off |
>>> | Zero fill right shift | Shifts right by pushing zeros in from the left, and let the rightmost bits fall off |
ตัวอย่าง
Operation | Result | Same as | Result |
---|---|---|---|
5 & 1 | 1 | 0101 & 0001 | 0001 |
5 | 1 | 5 | 0101 | 0001 | 0101 |
~ 5 | 10 | ~0101 | 1010 |
5 << 1 | 10 | 0101 << 1 | 1010 |
5 ^ 1 | 4 | 0101 ^ 0001 | 0100 |
5 >> 1 | 2 | 0101 >> 1 | 0010 |
5 >>> 1 | 2 | 0101 >>> 1 | 0010 |
JavaScript ใช้ 32 บิตตัวถูกดำเนินการ Bitwise
JavaScript เก็บตัวเลขเป็นตัวเลขทศนิยม 64 บิต แต่การดำเนินการระดับบิตทั้งหมดจะดำเนินการบนเลขฐานสอง 32 บิต
ก่อนดำเนินการระดับบิต JavaScript จะแปลงตัวเลขเป็นจำนวนเต็มที่ลงนาม 32 บิต
หลังจากดำเนินการระดับบิตแล้ว ผลลัพธ์จะถูกแปลงกลับเป็นตัวเลข JavaScript 64 บิต
ตัวอย่างข้างต้นใช้เลขฐานสองที่ไม่มีเครื่องหมาย 4 บิต ด้วยเหตุนี้ ~ 5 ผลตอบแทน 10
เนื่องจาก JavaScript ใช้จำนวนเต็มที่ลงนาม 32 บิต จะไม่ส่งคืน 10 แต่จะคืนค่า -6
000000000000000000000000000000101 (5)
11111111111111111111111111111010 (~5 = -6)
จำนวนเต็มที่ลงนามใช้บิตซ้ายสุดเป็นเครื่องหมายลบ
Bitwise และ
เมื่อดำเนินการระดับบิต AND กับคู่ของบิต จะส่งกลับ 1 หากทั้งสองบิตเป็น 1
การดำเนินการ | ผลลัพธ์ |
---|---|
0 & 0 | 0 |
0 & 1 | 0 |
1 & 0 | 0 |
1 & 1 | 1 |
การดำเนินการ | ผลลัพธ์ |
---|---|
1111 & 0000 | 0000 |
1111 & 0001 | 0001 |
1111 & 0010 | 0010 |
1111 & 0100 | 0100 |
Bitwise OR
เมื่อดำเนินการ OR ระดับบิตบนคู่ของบิต จะส่งกลับ 1 หากหนึ่งในบิตเป็น 1:
การดำเนินการ | ผลลัพธ์ |
---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
การดำเนินการ | ผลลัพธ์ |
---|---|
1111 | 0000 | 1111 |
1111 | 0001 | 1111 |
1111 | 0010 | 1111 |
1111 | 0100 | 1111 |
Bitwise XOR
เมื่อดำเนินการ XOR ระดับบิตบนคู่ของบิต จะส่งกลับ 1 หากบิตต่างกัน:
การดำเนินการ | ผลลัพธ์ |
---|---|
0 ^ 0 | 0 |
0 ^ 1 | 1 |
1 ^ 0 | 1 |
1 ^ 1 | 0 |
การดำเนินการ | ผลลัพธ์ |
---|---|
1111 ^ 0000 | 1111 |
1111 ^ 0001 | 1110 |
1111 ^ 0010 | 1101 |
1111 ^ 0100 | 1011 |
JavaScript Bitwise และ (&)
Bitwise AND คืนค่า 1 ต่อเมื่อทั้งสองบิตเป็น 1:
ทศนิยม | ไบนารี่ |
---|---|
5 | 000000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 & 1 | 00000000000000000000000000000001 (1) |
ตัวอย่าง
let x = 5 & 1;
JavaScript Bitwise หรือ (|)
Bitwise OR คืนค่า 1 หากหนึ่งในบิตเป็น 1:
ทศนิยม | ไบนารี่ |
---|---|
5 | 000000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 | 1 | 000000000000000000000000000000101 (5) |
ตัวอย่าง
let x = 5 | 1;
JavaScript Bitwise XOR (^)
Bitwise XOR คืนค่า 1 หากบิตต่างกัน:
ทศนิยม | ไบนารี่ |
---|---|
5 | 000000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 ^ 1 | 000000000000000000000000000000100 (4) |
ตัวอย่าง
let x = 5 ^ 1;
JavaScript Bitwise ไม่ (~)
ทศนิยม | ไบนารี่ |
---|---|
5 | 000000000000000000000000000000101 |
~5 | 11111111111111111111111111111010 (-6) |
ตัวอย่าง
let x = ~5;
JavaScript (เติมศูนย์) Bitwise Shift ซ้าย (<<)
นี่คือกะซ้ายเติมศูนย์ บิตศูนย์อย่างน้อยหนึ่งบิตถูกผลักเข้าจากด้านขวา และบิตซ้ายสุดหลุดออกมา:
ทศนิยม | ไบนารี่ |
---|---|
5 | 000000000000000000000000000000101 |
5 << 1 | 0000000000000000000000000000001010 (10) |
ตัวอย่าง
let x = 5 << 1;
JavaScript (รักษาเครื่องหมาย) Bitwise Shift ขวา (>>)
นี้เป็นสัญญาณรักษากะขวา สำเนาของบิตซ้ายสุดจะถูกผลักเข้ามาจากด้านซ้าย และบิตขวาสุดหลุดออกมา:
ทศนิยม | ไบนารี่ |
---|---|
-5 | 11111111111111111111111111111011 |
-5 >> 1 | 11111111111111111111111111111101 (-3) |
ตัวอย่าง
let x = -5 >> 1;
JavaScript (เติมศูนย์) เลื่อนขวา (>>>)
นี่คือกะขวาเติมศูนย์ บิตศูนย์อย่างน้อยหนึ่งบิตถูกผลักเข้ามาจากทางซ้าย และบิตขวาสุดหลุดออกมา:
ทศนิยม | ไบนารี่ |
---|---|
5 | 000000000000000000000000000000101 |
5 >>> 1 | 00000000000000000000000000000000000010 (2) |
ตัวอย่าง
let x = 5 >>> 1;
เลขฐานสอง
เลขฐานสองที่มีชุดบิตเดียวเข้าใจง่าย:
ตัวแทนไบนารี | ค่าทศนิยม |
---|---|
00000000000000000000000000000001 | 1 |
00000000000000000000000000000010 | 2 |
000000000000000000000000000000100 | 4 |
0000000000000000000000000000001000 | 8 |
000000000000000000000000000000010000 | 16 |
00000000000000000000000000100000 | 32 |
00000000000000000000000001000000 | 64 |
การตั้งค่าอีกสองสามบิตเผยให้เห็นรูปแบบไบนารี:
ตัวแทนไบนารี | ค่าทศนิยม |
---|---|
000000000000000000000000000000101 | 5 (4 + 1) |
00000000000000000000000000000001101 | 13 (8 + 4 + 1) |
00000000000000000000000000000001101 | 45 (32 + 8 + 4 + 1) |
เลขฐานสองของ JavaScript ถูกจัดเก็บในรูปแบบเสริมสองรูปแบบ
ซึ่งหมายความว่าจำนวนลบเป็นค่าระดับบิต ไม่ใช่จำนวนบวก 1:
ตัวแทนไบนารี | ค่าทศนิยม |
---|---|
000000000000000000000000000000101 | 5 |
11111111111111111111111111111011 | -5 |
0000000000000000000000000000000110 | 6 |
11111111111111111111111111111010 | -6 |
000000000000000000000000000000101000 | 40 |
111111111111111111111111111011000 | -40 |
การแปลงทศนิยมเป็นไบนารี
ตัวอย่าง
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
การแปลงไบนารีเป็นทศนิยม
ตัวอย่าง
function bin2dec(bin){
return parseInt(bin, 2).toString(10);
}