(data >> BIT_INDEX) & 1 == ?
จาก code ตัวอย่างข้อบนตัวแปร data แล้ว shift ไป BIT_INDEX ตัว จากนั้นนำข้อมูลที่ได้มา AND กับ 1 เพื่อให้ bit ที่ 7-1 (กำหนดให้นับ 8 ตัวคือ index ที่ 0 - 7) มีค่าเป็น 0 เช่น
0xA5 แล้วอยากดูว่า บิตที่ตำแหน่งที่ 3 มีค่าเป็นอะไร ตำแหน่งที่ 3 ต้อง shift ไปทางขวา 2 บิต 1010 0101 >> 2 = 0010 1001 จากนั้น AND ด้วย 1 เพื่อให้ค่าในตำแหน่งอื่นมีค่าเป็น 0 กรณีที่ต้องการนำค่าไปใส่ในตัวแปร 0010 1001 & 1 = 1วิธีดังกล่าวข้างต้นเป็นวิธีที่มีการใช้กันโดยทั่วไป แต่ผมจะมาเสนออีกวิธีในการเข้าถึงข้อมูลแบบบิตด้วยการใช้ structure และ union ในภาษาซี
จาก struct ข้างต้นเป็นการ union ของ data structure 2 ตัวด้วยกันคือ struct { bit_7...bit_0 } และ uint8_t byte_0 ซึ่งสามารถเข้าถึงข้อมูลด้วย . หรือ -> ถ้าเป็น pointer เหมือน struct ทั่วไป
ตารางเทียบข้อมูลใน Memory
source code ทดสอบว่าเราคิดถูก :)
ผลการรันโปรแกรม
0 ความคิดเห็น:
แสดงความคิดเห็น