Bài 15.2 - Thao tác bit unset với Python

Trong lập trình, đôi khi bạn muốn tắt (unset) một bit cụ thể trong một số nguyên. Hôm nay, chúng ta sẽ tìm hiểu cách thực hiện điều này một cách đơn giản mà hiệu quả trong Python! 💡


1. Cách unset một bit cụ thể

Công thức:

x & ~(1 << k)

Trong đó:

  • x là số nguyên ban đầu.
  • k là vị trí bit muốn tắt (đếm từ 0, từ phải qua trái).
  • 1 << k tạo ra một số có bit thứ k1, các bit còn lại là 0.
  • ~(1 << k) đảo bit: chỉ bit thứ k0, các bit còn lại là 1.
  • Dùng phép & để giữ nguyên các bit khác, chỉ tắt bit k.

2. Ví dụ 1: Tắt bit thứ 1 của số 7

x = 7          # 0111
k = 1
result = x & ~(1 << k)
print(result)  # Kết quả: 5 (0101)
Giải thích:
  • 1 << 1 = 0010
  • ~(1 << 1) = 1101
  • 0111 & 1101 = 0101 → bằng 5

3. Ví dụ 2: Tắt bit thứ 2 của số 13

x = 13         # 1101
k = 2
result = x & ~(1 << k)
print(result)  # Kết quả: 9 (1001)
Giải thích:
  • 1 << 2 = 0100
  • ~(1 << 2) = 1011
  • 1101 & 1011 = 1001 → bằng 9

4. Ví dụ 3: Không ảnh hưởng nếu bit đã là 0

x = 8          # 1000
k = 1
result = x & ~(1 << k)
print(result)  # Kết quả: 8 (1000)
Giải thích:
  • Bit thứ 1 vốn đã là 0 → không thay đổi kết quả.

5. Đóng gói thành hàm Python

def unset_bit(x, k):
    return x & ~(1 << k)

print(unset_bit(7, 1))   # 5
print(unset_bit(13, 2))  # 9
print(unset_bit(8, 1))   # 8
Giải thích:
  • Hàm unset_bit đơn giản và có thể tái sử dụng nhiều lần.

Kết luận

Việc thao tác với bit unset giúp bạn viết các thuật toán hiệu quả hơn, đặc biệt trong các bài toán cần xử lý bitmask, lập lịch, tối ưu không gian. Hãy luyện tập để làm chủ thao tác này nhé!

💡 Bitmask là một công cụ mạnh mẽ, và việc unset bit là kỹ năng không thể thiếu.


#HappyCoding cùng FullhouseDev! 🚀

Comments

There are no comments at the moment.