Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Python

โปรแกรม Python ล้างบิตเซตขวามากที่สุด (Rightmost Set Bit) ของตัวเลข


เมื่อต้องการล้างบิต 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)

  • เทคนิคนี้ใช้บ่อยในการนับบิตเซตหรือวนลูปผ่ายเซตบิต