3 ก.ค. 2020 เวลา 11:00 • วิทยาศาสตร์ & เทคโนโลยี
วันนี้เราจะมาต่อกับเลขฐานสองที่เราเรียนไปครั้งที่แล้ว โดยจะเป็น Bitwise Operators หรือภาษาไทยเรียกว่า “ตัวดำเนินการระดับบิต”
Bitwise Operators ใช้สำหรับเปรียบเทียบเลขฐานสอง โดยเราจะรับค่าตัวเลขฐานสิบมาก่อน แล้วระบบจะแปลงให้เป็นเลขฐานสอง จากนั้นจะดำเนินการด้วย Operator ระหว่างเลขฐานสองนั้น ๆ แล้วค่อยคืนค่าเป็นเลขฐานสิบ
กำหนดให้ A และ B เป็นเลขฐานสองใด ๆ (จะประกอบด้วย 0 หรือ 1 เท่านั้น)
และ D เป็นเลขฐานสิบใด ๆ จะมีตัวดำเนินการดังนี้
1. & (AND): A & B หมายถึง ให้นำเลขฐานสองของทั้งสองมาตั้งหลักไว้ แล้วทำการเจอตัวเลขในแต่ละหลัก (1 เจอ 1 ได้ 1 กรณีอื่นมีค่าเป็น 0) เช่น 11 & 23 = ?
ซึ่งแปลงเป็นเลขฐานสองก่อนจะได้ 11 = 1011v2 และ 23 = 10111v2
เราจะได้ว่า 01011v2 (สามารถเติม 0 ข้างหน้าให้หลักเท่ากันได้)
&
10111v2
= 00011v2
ดังนั้น 11 & 23 = 3
Trick: ให้คิดว่า 0 คือเท็จ และ 1 คือจริง แล้วดำเนินการทางตรรกศาสตร์ and ก็ได้
2. | (OR): A | B หมายถึง ให้นำเลขฐานสองของทั้งสองมาตั้งหลักไว้ แล้วทำการเจอตัวเลขในแต่ละหลัก (0 เจอ 0 ได้ 0 กรณีอื่นมีค่าเป็น 1) เช่น 84 | 99 = ?
เห็นได้ว่า 84 = 1010100v2 และ 99 = 1100011v2
ดังนั้น 1010100v2
|
1100011v2
= 1110111v2
นั่นคือ 84 | 99 = 64+32+16+4+2+1 = 119
Trick: ให้คิดว่า 0 คือเท็จ และ 1 คือจริง แล้วดำเนินการทางตรรกศาสตร์ or ก็ได้
3. ^ (XOR): A ^ B หมายถึง ให้นำเลขฐานสองของทั้งสองมาตั้งหลักไว้ แล้วทำการเจอตัวเลขในแต่ละหลัก (เลขเหมือนกันได้ 0 และเลขต่างกันได้ 1) เช่น 129 ^ 3 = ?
เห็นได้ว่า 129 = 10000001v2 และ 3 = 11v2
ดังนั้น 10000001v2
00000011v2
=10000010v2
นั่นคือ 129 ^ 3 = 2**7+2**1 = 130
4. ~ (NOT): ~A หมายถึง -(A | 1v2) แล้วค่อยแปลงเป็นฐานสิบ
เช่น ~78 = ~(1001110)v2 = -(1001110v2 | 1v2) = -(1001111)v2 = -79
5. << (Bitwise left shift): A<<D หมายถึงให้เลื่อนบิตของ A ไปทางซ้าย D หลัก
เช่น 44<<2 = ?
เราทราบว่า 44 = 32+8+4 = (00) 101100v2 เติม 0 ด้านหน้าจำนวน D ตัว แล้วทำการเลื่อนบิตไปทางซ้าย 2 หลัก
จะได้ 44<<2 = 10110000v2 = 128+32+16 = 176
หมายเหตุ: ความจริงแล้วคือการเติม 0 ไว้ข้างหลังจำนวน D ตัวนั่นเอง
6. >> (Bitwise right shift): A >>Dหลักการคล้าย << แต่จะเลื่อนไปทางขวาแทน
เช่น 76>>3 = ?
เราทราบว่า 76 = 64+8+4 = 1001100v2 (000) เติม 0 จำนวน D ตัว แล้วทำการเลื่อนบิตไปทางขวา 3 หลัก
จะได้ 76>>3 = 1001v2 = 8+1 = 9
หมายเหตุ: ความจริงแล้วคือลบตัวเลขตั้งแต่ท้ายสุดมาจำนวน D ตัวนั่นเอง
คำถามประจำบท
ข้อต่อไปนี้จะแสดงผลลัพธ์เป็นอย่างไร
1. 67 & 44
2. 908 | 809
3. 87 ^ 2
4. ~ 66
5. 88<<4
6. 9887>>3
7. ~((76 & 67) | (55<<2))
ถ้าใครมีคำถามหรือข้อเสนอแนะ comment มาได้นะครับ ยินดีรับฟังทุกความคิดเห็นเลย
เรื่องอื่นเพิ่มเติม: https://www.blockdit.com/articles/5eedede2db20a50cafa7a2b3
Created by MickeyMouse
โฆษณา