ลอจิกและ ตั้งค่าแต่ละบิตเป็น 1 หากทั้งสองบิตเป็น 1
ลอจิกหรือ ตั้งค่าแต่ละบิตเป็น 1 หากหนึ่งในสองบิตเป็น 1
ลอจิก XOR ตั้งค่าแต่ละบิตเป็น 1 หากมีเพียงหนึ่งในสองบิตเท่านั้นที่เป็น 1
ลอจิกไม่ แปลงบิตทั้งหมด
กะด้านซ้ายเติมศูนย์ เลื่อนไปทางซ้ายโดยการกดเลขศูนย์เข้ามาจากทางขวา และปล่อยให้บิตทางซ้ายสุดหลุดออกไป
ลงนามกะขวา เลื่อนไปทางขวาโดยการกดสำเนาของบิตซ้ายสุดเข้ามาจากด้านซ้าย และปล่อยให้บิตขวาสุด หล่นจาก
เติมกะด้านขวาเป็นศูนย์ เลื่อนไปทางขวาโดยกดศูนย์เข้ามาจากทางซ้าย และปล่อยให้บิตขวาสุดหลุดออกไป
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 เก็บตัวเลขเป็นตัวเลขทศนิยม 64 บิต แต่ทั้งหมดเป็นแบบบิต การดำเนินการจะดำเนินการกับเลขฐานสอง 32 บิต
ก่อนที่จะดำเนินการในระดับบิต JavaScript จะแปลงตัวเลขเป็น 32 บิต จำนวนเต็มลงนาม
หลังจากดำเนินการในระดับบิตแล้ว ผลลัพธ์จะถูกแปลงกลับเป็น JavaScript 64 บิต ตัวเลข
ตัวอย่างข้างต้นใช้เลขฐานสองที่ไม่ได้ลงนามขนาด 4 บิต ด้วยเหตุนี้ ~ 5 จึงส่งคืน 10
เนื่องจาก JavaScript ใช้จำนวนเต็มที่มีเครื่องหมาย 32 บิต มันจะไม่ส่งคืน 10 แต่จะส่งคืน -6
0000000000000000000000000000101 (5)
11111111111111111111111111111010 (~5=-6)
จำนวนเต็มที่ลงนามจะใช้บิตซ้ายสุดเป็นเครื่องหมายลบ
เมื่อดำเนินการตามระดับบิต AND กับบิตคู่หนึ่ง จะส่งคืนค่า 1 หากทั้งสองบิตเป็น 1
0
0
0
1
0000
0001
0010
0100
เมื่อดำเนินการตามระดับบิต OR กับคู่ของบิต มันจะคืนค่า 1 หากหนึ่งในบิตนั้นเป็น 1:
0
1
1
1
1111
1111
1111
1111
เมื่อ XOR ระดับบิตถูกดำเนินการกับคู่ของบิต มันจะคืนค่า 1 หากบิตนั้นแตกต่างกัน:
0
1
1
0
1111
1110
1101
1011
Bitwise AND ส่งคืน 1 เฉพาะในกรณีที่ทั้งสองบิตเป็น 1:
00000000000000000000000000000101
00000000000000000000000000000001
0000000000000000000000000000001 (1)
let x = 5 & 1;
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Bitwise AND</h1>
<h2>The & Operator</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 5 & 1;
</script>
</body>
</html>
Bitwise OR ส่งคืน 1 ถ้าหนึ่งในบิตเป็น 1:
00000000000000000000000000000101
00000000000000000000000000000001
0000000000000000000000000000101 (5)
let x = 5 | 1;
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Bitwise OR</h1>
<h2>The | Operator</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 5 | 1;
</script>
</body>
</html>
Bitwise XOR ส่งคืน 1 หากบิตต่างกัน:
00000000000000000000000000000101
00000000000000000000000000000001
0000000000000000000000000000100 (4)
let x = 5 ^ 1;
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Bitwise XOR</h1>
<h2>The ^ Operator</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 5 ^ 1;
</script>
</body>
</html>
00000000000000000000000000000101
11111111111111111111111111111010 (-6)
let x = ~5;
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Bitwise NOT</h1>
<h2>The ~ Operator</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = ~ 5;
</script>
</body>
</html>
นี่คือกะซ้ายเติมศูนย์ บิตศูนย์อย่างน้อยหนึ่งบิตถูกผลักเข้ามาจากด้านขวา และบิตซ้ายสุดก็หลุดออกไป:
00000000000000000000000000000101
0000000000000000000000000001010 (10)
let x = 5 << 1;
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Bitwise Left</h1>
<h2>The << Operator</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 5 << 1;
</script>
</body>
</html>
นี่คือสัญญาณที่รักษาการเปลี่ยนแปลงที่ถูกต้อง สำเนาของบิตซ้ายสุดจะถูกผลัก จากทางซ้าย และบิตขวาสุดหลุดออกไป:
11111111111111111111111111111011
11111111111111111111111111111101 (-3)
let x = -5 >> 1;
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Signed Bitwise Right</h1>
<h2>The >> Operator</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = -5 >> 1;
</script>
</body>
</html>
นี่คือกะด้านขวาเติมศูนย์ บิตศูนย์อย่างน้อยหนึ่งบิตถูกผลักเข้ามาจากด้านซ้าย และบิตขวาสุดก็หลุดออกไป:
00000000000000000000000000000101
0000000000000000000000000000010 (2)
let x = 5 >>> 1;
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Unsigned Bitwise Right</h1>
<h2>The >>> Operator</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = 5 >>> 1;
</script>
</body>
</html>
เลขฐานสองที่มีชุดบิตเดียวนั้นง่ายต่อการเข้าใจ:
1
2
4
8
16
32
64
การตั้งค่าอีกสองสามบิตจะแสดงรูปแบบไบนารี่:
5 (4 + 1)
13 (8 + 4 + 1)
45 (32 + 8 + 4 + 1)
หมายเลขไบนารี่ของ JavaScript จะถูกจัดเก็บในรูปแบบเสริมของสอง
ซึ่งหมายความว่าจำนวนลบจะเป็นค่าระดับบิต NOT ของจำนวนบวก 1:
5
-5
6
-6
40
-40
มีคนเพียง 10 ประเภทในโลกนี้: คนที่เข้าใจไบนารี่และคนที่ไม่เข้าใจ
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h1>JavaScript Convert Decimal to Binary</h1>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = dec2bin(-5);
function dec2bin(dec){
return (dec >>> 0).toString(2);
}
</script>
</body>
</html>
function bin2dec(bin){
return parseInt(bin, 2).toString(10);
}
ลองด้วยตัวคุณเอง →
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript Convert Binary to Decimal</h2>
<p id="demo"></p>
<script>
document.getElementById("demo").innerHTML = bin2dec(101);
function bin2dec(bin){
return parseInt(bin, 2).toString(10);
}
</script>
</body>
</html>