Bạn chỉ cần:
def set_bit(v, index, x):
"""Set the index:th bit of v to 1 if x is truthy, else to 0, and return the new value."""
mask = 1 << index # Compute mask, an integer with just bit 'index' set.
v &= ~mask # Clear the bit indicated by the mask (if x is False)
if x:
v |= mask # If x was True, set the bit indicated by the mask.
return v # Return the result, we're done.
>>> set_bit(7, 3, 1)
15
>>> set_bit(set_bit(7, 1, 0), 3, 1)
13
Lưu ý rằng cắn số (index
) là từ 0, với 0 là bit ít quan trọng.
Cũng lưu ý rằng giá trị mới là trả về, không có cách nào để sửa đổi số nguyên "tại chỗ" như bạn hiển thị (ít nhất tôi không nghĩ vậy).
Cũng giống như trong C. http://wiki.python.org/moin/BitwiseOperators – Kos
Hãy cẩn thận với các tiền tố của bạn cho các số nguyên nguyên ... '0x' là tiền tố cho số _hexadecimal_. Tiền tố bạn muốn là '0b'. –