ฉันเพิ่งเริ่มเรียนรู้การเขียนรหัสและในหนังสือของฉันฉันเจอคำถามนี้ "ทำไมค่าบูลีนจึงถูกจัดเก็บเป็นไบต์ภายในคอมพิวเตอร์เมื่อต้องการเพียงบิตเดียว" บางคนสามารถให้ความกระจ่างแก่คำถามนี้ได้มากขึ้น
ฉันเพิ่งเริ่มเรียนรู้การเขียนรหัสและในหนังสือของฉันฉันเจอคำถามนี้ "ทำไมค่าบูลีนจึงถูกจัดเก็บเป็นไบต์ภายในคอมพิวเตอร์เมื่อต้องการเพียงบิตเดียว" บางคนสามารถให้ความกระจ่างแก่คำถามนี้ได้มากขึ้น
คำตอบ:
มันเกี่ยวข้องกับสิ่งที่ CPU สามารถจัดการได้อย่างง่ายดาย ตัวอย่างเช่นในโปรเซสเซอร์ x86 มีeax
(32 บิต), ax
(16 บิต) และah
(8 บิต) แต่ไม่มีการลงทะเบียนบิตเดียว ดังนั้นในการที่จะใช้ซีพียูสักหน่อยซีพียูจะต้องทำการอ่าน / แก้ไข / เขียนเพื่อเปลี่ยนค่า หากถูกเก็บเป็นไบต์คุณสามารถใช้การอ่านหรือเขียนครั้งเดียวเพื่อตรวจสอบ / เปลี่ยนค่า
นอกจากนี้หนึ่งอาจสงสัยว่ามันจะดีกว่าถ้าใช้บิตเดียวเทียบกับไบต์เต็มหลังจากไบต์ทั้งหมดจะเสีย 7 บิต เว้นเสียแต่ว่าพื้นที่จะมีข้อ จำกัด ที่ควรไปสำหรับไบต์เพราะอย่างน้อย x86 และฉันคิดว่าคนอื่น ๆ มักจะมีคำแนะนำในการตั้งค่า / ล้างบูลอย่างรวดเร็วซึ่งเร็วกว่าการอ่าน / แก้ไข / เขียนบิตเพียงเล็กน้อย . จากการวัดส่วนบุคคลฉันได้เห็นวิธีการอ่าน / ดัดแปลง / เขียนช้ากว่าวิธีการสอนเดี่ยว 5 เท่า
ดังที่ @ barrem23 อธิบายว่าข้อมูลจะต้องสามารถกำหนดแอดเดรสได้และขอบเขตที่เล็กที่สุดของสถาปัตยกรรมทั่วไปคือไบต์
แต่เนื่องจากคำถามนี้จะติดแท็กเป็นC ++ก็อาจจะคุ้มค่าที่ชี้ให้เห็นว่าstd::vector<bool>
เป็นความเชี่ยวชาญที่จะอนุญาตให้แต่ละองค์ประกอบจะถูกเก็บไว้เป็นบิต วิธีนี้จะช่วยประหยัดพื้นที่ด้วยการเสียสละฟังก์ชั่นบางอย่าง (ตัวอย่างเช่นstd::search
อาจไม่ทำงาน)