เมื่อต้องการล้างบิต 1 ขวามากที่สุดของตัวเลข สามารถใช้การดำเนินการ AND ระหว่างตัวเลขกับตัวเลขลบ 1
ตัวอย่างโค้ด
def clear_rightmost_set_bit(n):
return n & (n - 1)
n_val = 6
print("The value of n is:", n_val)
print("The number after unsetting the rightmost set bit is:")
print(clear_rightmost_set_bit(n_val))ผลลัพธ์
The value of n is: 6 The number after unsetting the rightmost set bit is: 4
คำอธิบาย
6 ในไบนารีคือ 110 บิต 1 ขวามากที่สุดอยู่ที่ตำแหน่ง 1 (นับจาก 0)
n - 1จะกลับบิตทั้งหมดหลังบิต 1 ขวามากที่สุด (6-1=5 คือ 101)n & (n-1)จะล้างบิต 1 ขวามากที่สุดออก (110 & 101 = 100 = 4)เทคนิคนี้ใช้บ่อยในการนับบิตเซตหรือวนลูปผ่ายเซตบิต