ฉันชอบ "ชุด" / "ชัดเจน" แต่ระวังความกำกวมในการใช้ถ้อยคำของคุณ ดังที่ฟิลิปส์ชี้ให้เห็น "ตั้งค่าตัวแปรบูล" สามารถใช้เพื่อหมายถึงการเขียนค่าลงในตัวแปร แต่ "การตั้งค่าสถานะ" นั้นชัดเจนยิ่งขึ้น
คำศัพท์ที่เกี่ยวข้อง: เปลี่ยน 0 / ไม่ใช่ศูนย์จำนวนเต็มเป็นค่า 0/1 เรียกว่า "booleanizing"
หากคุณใช้ค่า 0/1 เป็นจำนวนเต็ม (แทนที่จะเป็นจริง / เท็จbool
) คุณอาจต้องการใช้คำนั้น มิฉะนั้นจะเกิดขึ้นได้ก็ต่อเมื่อคุณกำลังพูดถึงค่าใช้จ่ายในการดำเนินการที่คอมไพเลอร์ต้องดำเนินการ (หรือถ้าคุณกำลัง vectorizing ด้วยตนเองเปรียบเทียบ SIMD เพื่อสร้างบิตทั้งหมด / ศูนย์ - all-one ในแต่ละองค์ประกอบเวกเตอร์)
ใน C และ C ++, a bool
สามารถแปลงกลับเป็นจำนวนเต็มเป็น 0 หรือ 1 โดยปริยายและในการใช้งานปกติbool
จะถูกเก็บไว้เป็นค่าหนึ่งไบต์ที่เป็น 0 หรือ 1 (ไม่ใช่แค่ค่าที่ไม่ใช่ศูนย์) ช่วยให้มีประสิทธิภาพa && b
แต่ในทางปฏิบัติคอมไพเลอร์ C จำนวนมากพลาดการปรับแต่ง
bool booleanize(int a) { return a; } // C++
ฟังก์ชันดังกล่าวรวบรวมคำสั่งหลายคำสั่ง (ไม่รวมถึงret
) ในสถาปัตยกรรมส่วนใหญ่ (MIPS เป็นข้อยกเว้นที่น่าสนใจโดยมีคำแนะนำเปรียบเทียบลงทะเบียนแทนการลงทะเบียนสถานะ / รหัสเงื่อนไขแยกต่างหาก) บนตัวรวบรวมคอมไพเลอร์ Godbolt สำหรับ x86-64, MIPS และนิ้วหัวแม่มือ ARMเราจะเห็นเวอร์ชั่น x86-64 คือ:
test edi, edi # set flags according to a & a
setne al
ret # return value in AL, the low byte of RAX
ขออภัยตัวอย่างของสิ่งบูลีนที่มีขนาดใหญ่ / นอกหัวข้อเล็กน้อย!