JavaScript การทำงานทางบิท
- หน้าก่อนหน้า JS การตัดแยก
- หน้าต่อไป JS สัญญาณแบบตัวเลข
JavaScript การทำงานทางบิท
ประเภทการทำงาน | ชื่อ | บรรยาย |
---|---|---|
& | AND | ถ้าทั้งสองตำแหน่งเป็น 1 ก็ตั้งแต่ทุกตำแหน่งเป็น 1 |
| | OR | ถ้าหนึ่งในสองตำแหน่งเป็น 1 ก็ตั้งแต่ทุกตำแหน่งเป็น 1 |
^ | XOR | ถ้าทั้งสองตำแหน่งมี 1 ตำแหน่งเท่านั้น ก็ตั้งแต่ทุกตำแหน่งเป็น 1 |
~ | NOT | ปรับปรุงทุกตำแหน่ง |
<< | เลื่อนข้างซ้ายด้วยการบอกเข้ามา 0 | ผ่านการเลื่อนข้างซ้ายด้วยการบอกเข้ามา 0 และทำให้ตำแหน่งที่ด้านซ้ายขวางออกมา |
>> | เลื่อนข้างขวาสัญญาณ | ผ่านการเลื่อนข้างขวาด้วยการบอกเข้ามาสำเนาตำแหน่งที่ด้านซ้ายขวางและทำให้ตำแหน่งที่ด้านขวาสุดออกมา |
>>> | เลื่อนข้างขวาด้วยการบอกเข้ามา 0 | ผ่านการเลื่อนข้างขวาด้วยการบอกเข้ามา 0 และทำให้ตำแหน่งที่ด้านขวาสุดออกมา |
ตัวอย่าง
ปฏิบัติการ | ผลลัพธ์ | เท่ากัน | ผลลัพธ์ |
---|---|---|---|
5 & 1 | 1 | 0101 & 0001 | 0001 |
5 | 1 | 5 | 0101 | 0001 | 0101 |
5 ^ 1 | 4 | 0101 ^ 0001 | 0100 |
~ 5 | 10 | ~0101 | 1010 |
5 << 1 | 10 | 0101 << 1 | 1010 |
5 >> 1 | 2 | 0101 >> 1 | 0010 |
5 >>> 1 | 2 | 0101 >>> 1 | 0010 |
JavaScript ใช้ปฏิบัติการบิต 32 บิต
JavaScript จะเก็บเลขในรูปแบบเลขจำนวนเป็นจุด 64 บิต แต่ทุกปฏิบัติการบิตจะทำด้วย 32 บิตของเลขที่เก็บไว้นั้น。
ก่อนที่จะทำปฏิบัติการบิต JavaScript จะแปลงเลขเป็นเลขจำนวนเป็นสัญลักษณ์ 32 บิต。
หลังจากทำปฏิบัติการบิต ผลลัพธ์จะถูกแปลงกลับเป็นเลขจำนวน JavaScript 64 บิต。
ตัวอย่างดังกล่าวใช้เลขจำนวนบิตที่ไม่มีสัญลักษณ์ 4 บิต ดังนั้น ~5 จะคืนค่า 10。
เนื่องจาก JavaScript ใช้เลขจำนวนเป็นสัญลักษณ์ 32 บิต จึงจะคืนค่า -6。
00000000000000000000000000000101 (5)
11111111111111111111111111111010 (~5 = -6)
เลขจำนวนเป็นสัญลักษณ์ใช้บิตที่ด้านซ้ายสุดเป็นลูกศร。
ปฏิบัติการบิต AND
ขณะที่ทำปฏิบัติการบิต 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 |
ปฏิบัติการบิต 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 |
ปฏิบัติการบิต 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 ปฏิบัติการบิต AND (&)
ถ้าทั้งหมดเป็น 1 ในตำแหน่งบิต ปฏิบัติการบิต AND จะคืนค่า 1:
เลขฐานสิบ | สองทศนิยม |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 & 1 | 00000000000000000000000000000001 (1) |
ตัวอย่าง
var x = 5 & 1;
JavaScript ปฏิบัติการบิต OR (|)
ถ้าหนึ่งในตำแหน่งเลขเป็น 1 การประมวลผล OR จะกลับ 1:
เลขฐานสิบ | สองทศนิยม |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 | 1 | 00000000000000000000000000000101 (5) |
ตัวอย่าง
var x = 5 | 1;
XOR (^) ประมวลผลบิต JavaScript
ถ้าตำแหน่งเลขเป็นตัวแตกต่าง การ XOR จะกลับ 1:
เลขฐานสิบ | สองทศนิยม |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 ^ 1 | 00000000000000000000000000000100 (4) |
ตัวอย่าง
var x = 5 ^ 1;
NOT (~) ประมวลผลบิต JavaScript
เลขฐานสิบ | สองทศนิยม |
---|---|
5 | 00000000000000000000000000000101 |
~5 | 11111111111111111111111111111010 (-6) |
ตัวอย่าง
var x = ~5;
การเลื่อนซ้าย (<<) ด้วยการประมวลผลบิตที่มีการกรอบเติมศูนย์ JavaScript
นี่คือการเลื่อนซ้ายด้วยการกรอบเติมศูนย์ หนึ่งหรือหลายตำแหน่งศูนย์จากด้านขวาถูกขับเข้ามา และตำแหน่งที่ด้านซ้ายถูกถอดออกไป:
เลขฐานสิบ | สองทศนิยม |
---|---|
5 | 00000000000000000000000000000101 |
5 << 1 | 00000000000000000000000000001010 (10) |
ตัวอย่าง
var x = 5 << 1;
การเลื่อนขวา (>>) ด้วยการประมวลผลบิตที่มีสัญญาณ JavaScript
นี่คือการเลื่อนขวาที่รักษาสัญญาณ ตำแหน่งที่ด้านซ้ายถูกขับเข้ามาจากด้านซ้าย และตำแหน่งที่ด้านขวาถูกย้ายออกไป:
เลขฐานสิบ | สองทศนิยม |
---|---|
-5 | 11111111111111111111111111111011 |
-5 >> 1 | 11111111111111111111111111111101 (-3) |
ตัวอย่าง
var x = -5 >> 1;
เลื่อนขวา (>>>) ด้วยการกรอบเติมศูนย์ JavaScript
นี่คือการเลื่อนขวาด้วยการกรอบเติมศูนย์ หนึ่งหรือหลายตำแหน่งศูนย์จากด้านซ้ายถูกขับเข้ามา และตำแหน่งที่ด้านขวาถูกย้ายออกไป:
เลขฐานสิบ | สองทศนิยม |
---|---|
5 | 00000000000000000000000000000101 |
5 >>> 1 | 00000000000000000000000000000010 (2) |
ตัวอย่าง
var x = 5 >>> 1;
เลขจำนวนเต็ม 32 บิต มีสัญญาณ (เลขสองทศนิยม)
ที่มีเพียงตัวเลขหนึ่งของเลขจำนวนเต็ม 32 บิตส์ง่ายต่อการเข้าใจ:
ตัวแทนเลขสองทศนิยม | ค่าเลขเศษสอง |
---|---|
00000000000000000000000000000001 | 1 |
00000000000000000000000000000010 | 2 |
00000000000000000000000000000100 | 4 |
00000000000000000000000000001000 | 8 |
00000000000000000000000000010000 | 16 |
00000000000000000000000000100000 | 32 |
00000000000000000000000001000000 | 64 |
จำนวนตำแหน่งเลขที่มากขึ้นเพิ่มเติมเปิดเผยรูปแบบของเลขสอง
ตัวแทนเลขสองทศนิยม | ค่าเลขเศษสอง |
---|---|
00000000000000000000000000000101 | 5 (4 + 1) |
00000000000000000000000000101000 | 40 (32 + 8) |
00000000000000000000000000101101 | 45 (32 + 8 + 4 + 1) |
เลขลบเป็นเลขบวกเสริมของเลขสองทศนิยมเพิ่ม 1:
ตัวแทนเลขสองทศนิยม | ค่าเลขเศษสอง |
---|---|
00000000000000000000000000000101 | 5 |
11111111111111111111111111111011 | -5 |
00000000000000000000000000101000 | 40 |
11111111111111111111111111011000 | -40 |
11111111111111111111111111011001 | -41 |
แปลงจากเลขเศษสองเป็นเลขสองทศนิยม
ตัวอย่าง
function dec2bin(dec){ return (dec >>> 0).toString(2); }
แปลงจากเลขสองทศนิยมเป็นเลขเศษสอง
ตัวอย่าง
function bin2dec(bin){ return parseInt(bin, 2).toString(10); }
- หน้าก่อนหน้า JS การตัดแยก
- หน้าต่อไป JS สัญญาณแบบตัวเลข