เพราะมันเป็นพลังของสองและฉันสามารถทำสิ่งนี้:
var permissions = Permissions.Read | Permissions.Write;
และบางทีในภายหลัง ...
if( (permissions & Permissions.Write) == Permissions.Write )
{
    // we have write access
}
มันเป็นฟิลด์บิตที่แต่ละบิตตั้งค่าสอดคล้องกับสิทธิ์บางอย่าง (หรือสิ่งที่ค่าที่แจกแจงสอดคล้องกับเหตุผล) หากสิ่งเหล่านี้ถูกกำหนดเพราะ1, 2, 3, ...คุณจะไม่สามารถใช้ตัวดำเนินการระดับบิตในแบบนี้และได้ผลลัพธ์ที่มีความหมาย เพื่อเจาะลึก ...
Permissions.Read   == 1 == 00000001
Permissions.Write  == 2 == 00000010
Permissions.Delete == 4 == 00000100
สังเกตรูปแบบที่นี่? ตอนนี้ถ้าเราใช้ตัวอย่างดั้งเดิมของฉันคือ
var permissions = Permissions.Read | Permissions.Write;
จากนั้น ...
permissions == 00000011
ดู? มีการตั้งค่าทั้งสองReadและWriteบิตและฉันสามารถตรวจสอบได้อย่างอิสระ (โปรดสังเกตว่าDeleteบิตไม่ได้ถูกตั้งค่าและดังนั้นค่านี้จึงไม่อนุญาตให้ลบ  
อนุญาตให้หนึ่งเก็บหลายแฟล็กในฟิลด์เดียวของบิต