này người học. Trong hướng dẫn này, chúng ta sẽ sử dụng ngôn ngữ lập trình Python để tính tổng số bit đã đặt trong một số nguyên. Vấn đề này sẽ chứng minh tầm quan trọng và sức mạnh của khái niệm Thao tác bit
Set Bits là gì – Giới thiệu
Trong thế giới của các số nhị phân, các bit tập hợp được biểu thị bằng 1. Vì vậy, về cơ bản, chúng ta cần tìm tổng số 1 ở dạng nhị phân của một số
Hiểu vấn đề
Cho một số N
.
Trả về tổng số bộ bit có trong phiên bản nhị phân của số N.
Ví dụ,
Nếu số đã cho [N] = 5. Sau đó, kết quả là 2 vì phiên bản nhị phân của 5 là 101. Tổng số 1 có mặt trong 101 là 2. Do đó số bit thiết lập là 2.
Cách tiếp cận 1. Chuyển đổi thủ công
Chuyển đổi số thập phân đã cho thành số nhị phân và sau đó đếm tổng số 1 ở dạng nhị phân của số được chuyển đổi. Tuy nhiên, đây không phải là một giải pháp hiệu quả cho vấn đề
Trong trường hợp này, độ phức tạp của thời gian sẽ là tuyến tính, nhưng chúng ta có thể làm cho chiến lược này hiệu quả hơn
Cách tiếp cận 2. Thao tác bit
Vì vậy, trong cách tiếp cận này, chúng ta sẽ thấy một trong các phương pháp Thao tác bit. Chúng tôi có thể cải thiện hiệu quả của mã và cách tiếp cận của mình bằng cách sử dụng phương pháp này
Bài viết này mô tả cách đếm số lượng
i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
0 trong biểu diễn nhị phân của số nguyên i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
1 bằng Python. Thao tác này còn được gọi là popcount [đếm dân số]
2[Trăn 3. 10 trở lên]i = -100 print[bin[i]] # -0b1100100 print[i.bit_count[]] # 3 i = -255 print[bin[i]] # -0b11111111 print[i.bit_count[]] # 8
3[Trăn 3. 9 hoặc sớm hơn]i = -100 print[bin[i]] # -0b1100100 print[i.bit_count[]] # 3 i = -255 print[bin[i]] # -0b11111111 print[i.bit_count[]] # 8
Xem các bài viết sau để biết thêm thông tin về biểu diễn nhị phân và hoạt động theo bit trong Python
- Chuyển đổi nhị phân, bát phân, thập phân và thập lục phân trong Python
- Toán tử bitwise trong Python [AND, OR, XOR, NOT, SHIFT]
Liên kết được tài trợ
i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
2[Trăn 3. 10 trở lên]
i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
Phương thức
i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
5 đã được thêm vào Python 3. 10- Các loại tích hợp - int. bit_count[] — Python 3. 11. 0 tài liệu
i = 100
print[bin[i]]
# 0b1100100
print[i.bit_count[]]
# 3
i = 255
print[bin[i]]
# 0b11111111
print[i.bit_count[]]
# 8
nguồn. int_bit_count. py
Như được mô tả trong tài liệu chính thức,
i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
5 trả về số lượng i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
0 trong biểu diễn nhị phân của giá trị tuyệt đối của số nguyênTrả về số đơn vị trong biểu diễn nhị phân của giá trị tuyệt đối của số nguyên. Các loại tích hợp - int. bit_count[] — Python 3. 11. 0 tài liệu
i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
nguồn. int_bit_count. py
Như trong ví dụ trên, kết quả của
i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
2 cũng chỉ đơn giản là giá trị tuyệt đối có dấu trừ; - Chuyển đổi nhị phân, bát phân, thập phân và thập lục phân trong Python
i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
3[Trăn 3. 9 hoặc sớm hơn]
i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
Trong Trăn 3. 9 hoặc sớm hơn, phương pháp
i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
5 không được cung cấp, nhưng tương đương với i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
3, như được mô tả trong tài liệu chính thứcSử dụng hàm
i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
2 tích hợp để chuyển đổi một số nguyên i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
1 thành một chuỗi trong ký hiệu nhị phân và phương thức i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
8 để đếm các ký tự trong chuỗi- Đếm ký tự và chuỗi trong Python
def bit_count[self]:
return bin[self].count["1"]
print[bit_count[100]]
# 3
print[bit_count[255]]
# 8
print[bit_count[-100]]
# 3
print[bit_count[-255]]
# 8
nguồn. int_bit_count. py
Lưu ý rằng phương thức
i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
5 được thêm vào Python 3. 10 không sử dụng i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
2 và i = -100
print[bin[i]]
# -0b1100100
print[i.bit_count[]]
# 3
i = -255
print[bin[i]]
# -0b11111111
print[i.bit_count[]]
# 8
8 nhưng được triển khai bằng thuật toán hiệu quả trong C, vì vậy sẽ nhanh hơn- Thêm một phương pháp đếm số hiệu quả cho số nguyên · Vấn đề #74068 · python/cpython
- Trọng lượng hamming - Wikipedia
- https. //github. com/niklasf/cpython/blob/3e8422bb6c9fd0cdc4381815fca613e6975ee582/Objects/longobject. C#L5307-L5375
Lưu ý rằng mã bên dưới sử dụng lệnh ma thuật Jupyter Notebook
def bit_count[self]:
return bin[self].count["1"]
print[bit_count[100]]
# 3
print[bit_count[255]]
# 8
print[bit_count[-100]]
# 3
print[bit_count[-255]]
# 8
2 và không hoạt động khi chạy dưới dạng tập lệnh Python