Tất cả các toán tử này đều có điểm chung -- chúng là toán tử "bitwise". Nghĩa là, chúng hoạt động trên các số [thông thường], nhưng thay vì xử lý số đó như thể nó là một giá trị đơn lẻ, chúng xử lý nó như thể nó là một chuỗi bit, được viết dưới dạng nhị phân bổ sung hai. Nhị phân bù hai giống như biểu diễn nhị phân cổ điển cho số nguyên dương nhưng hơi khác đối với số âm. Các số âm được biểu diễn bằng cách thực hiện phép toán bù hai trên giá trị tuyệt đối của chúng. Vì vậy, một bản tóm tắt ngắn gọn về nhị phân bổ sung hai là theo thứ tự
Nhị phân bổ sung của hai cho số nguyên dương
- 0 được viết là "0"
- 1 được viết là "1"
- 2 được viết là "10"
- 3 là "11"
- 4 là "100"
- 5 là "101"
- .
- .
- 1029 là "10000000101" == 2**10 + 2**2 + 2**0 == 1024 + 4 + 1
Nhị phân bổ sung của hai cho số nguyên âm
Các số âm được viết với một số đứng đầu thay vì số 0 đứng đầu. Vì vậy, nếu bạn chỉ sử dụng 8 bit cho các số bù hai của mình, thì bạn coi các mẫu từ "00000000" đến "01111111" là các số nguyên từ 0 đến 127 và dành "1xxxxxxx" để viết số âm. Một số âm, -x, được viết bằng cách sử dụng mẫu bit cho [x-1] với tất cả các bit được bổ sung [được chuyển từ 1 thành 0 hoặc 0 thành 1]. Vậy -1 là phần bù[1 - 1] = phần bù[0] = "11111111" và -10 là phần bù[10 - 1] = phần bù[9] = phần bù["00001001"] = "11110110". Điều này có nghĩa là các số âm giảm dần đến -128 ["10000000"]
Tất nhiên, Python không sử dụng số 8 bit. Nó ĐÃ SỬ DỤNG để sử dụng tuy nhiên nhiều bit có nguồn gốc từ máy của bạn, nhưng vì đó không phải là thiết bị di động nên gần đây nó đã chuyển sang sử dụng số lượng bit VÔ HẠN. Do đó, số -5 được xử lý bởi các toán tử bitwise như thể nó được viết ". 1111111111111111111011"
chà. Với phần mở đầu đó [và này, có lẽ bạn đã biết điều này rồi], các toán tử rất dễ giải thích
các nhà khai thác
x > yTrả về x với các bit được dịch chuyển sang phải theo y vị trí. Điều này giống như //'ing x by 2**y. x & y Thực hiện "bitwise and". Mỗi bit của đầu ra là 1 nếu bit tương ứng của x AND của y là 1, ngược lại là 0. x. yThực hiện "bitwise hoặc". Mỗi bit của đầu ra là 0 nếu bit tương ứng của x AND của y là 0, ngược lại là 1. ~ xTrả về phần bù của x - số bạn nhận được bằng cách chuyển đổi từng số 1 thành số 0 và từng số 0 thành số 1. Điều này cũng giống như -x - 1. x ^ yThực hiện "bitwise loại trừ hoặc". Mỗi bit của đầu ra giống với bit tương ứng trong x nếu bit đó trong y là 0 và nó là phần bù của bit trong x nếu bit đó trong y là 1Chỉ cần nhớ về chuỗi vô hạn 1 bit ở dạng số âm và tất cả những điều này sẽ có ý nghĩa
Các lớp khác
Một điểm nữa. Python cho phép nạp chồng toán tử, vì vậy một số lớp có thể được viết để cho phép các toán tử theo bit, nhưng với một số ý nghĩa khác. Chẳng hạn, mô-đun bộ mới cho Python 2. 3 công dụng. và & cho hợp và giao
Python cung cấp các toán tử bitwise,
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
9[AND], print[x | y]
print[bin[x | y]]
# 11
# 0b1011
0[OR], print[x | y]
print[bin[x | y]]
# 11
# 0b1011
0[XOR], print[x | y]
print[bin[x | y]]
# 11
# 0b1011
1[NOT, đảo ngược], print[x | y]
print[bin[x | y]]
# 11
# 0b1011
2[SHIFT TRÁI], print[x | y]
print[bin[x | y]]
# 11
# 0b1011
3[SHIFT PHẢI]Bài viết này mô tả các nội dung sau
- Bitwise AND.
9print[x | y] print[bin[x | y]] # 11 # 0b1011
- Bitwise HOẶC.
0print[x | y] print[bin[x | y]] # 11 # 0b1011
- Bitwise XOR.
0print[x | y] print[bin[x | y]] # 11 # 0b1011
- Hoạt động bitwise với số nguyên âm
- Bitwise KHÔNG, đảo ngược.
1print[x | y] print[bin[x | y]] # 11 # 0b1011
- Dịch chuyển bit.
2,print[x | y] print[bin[x | y]] # 11 # 0b1011
3print[x | y] print[bin[x | y]] # 11 # 0b1011
Để biết thêm thông tin về cách chuyển đổi các số và chuỗi nhị phân, bát phân và thập lục phân bằng cách sử dụng
print[x ^ y]
print[bin[x ^ y]]
# 3
# 0b11
0, print[x ^ y]
print[bin[x ^ y]]
# 3
# 0b11
1, print[x ^ y]
print[bin[x ^ y]]
# 3
# 0b11
2 và print[x ^ y]
print[bin[x ^ y]]
# 3
# 0b11
3, hãy xem các bài viết sau- Chuyển đổi nhị phân, bát phân, thập phân và thập lục phân trong Python
Xem bài viết sau về cách đếm số lượng
print[x ^ y]
print[bin[x ^ y]]
# 3
# 0b11
4 trong biểu diễn nhị phân cho số nguyên print[x ^ y]
print[bin[x ^ y]]
# 3
# 0b11
5- Đếm số bit 1 trong python [int. bit_count]
Đối với các phép toán Boolean trên các loại
print[x ^ y]
print[bin[x ^ y]]
# 3
# 0b11
6 [print[x ^ y]
print[bin[x ^ y]]
# 3
# 0b11
7, print[x ^ y]
print[bin[x ^ y]]
# 3
# 0b11
8] thay vì các phép toán theo bit, hãy xem bài viết sau. Sử dụng print[x ^ y]
print[bin[x ^ y]]
# 3
# 0b11
9 và print[x | y]
print[bin[x | y]]
# 11
# 0b1011
80 thay vì print[x | y]
print[bin[x | y]]
# 11
# 0b1011
9 và print[x | y]
print[bin[x | y]]
# 11
# 0b1011
0- Toán tử Boolean trong Python [and, or, not]
Liên kết được tài trợ
Bitwise AND. print[x | y]
print[bin[x | y]]
# 11
# 0b1011
9
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
Bitwise AND với toán tử
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
9print[x | y]
print[bin[x | y]]
# 11
# 0b1011
9nguồn. and_or_bit. py
Bitwise HOẶC. print[x | y]
print[bin[x | y]]
# 11
# 0b1011
0
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
Bitwise OR với toán tử
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
0print[x | y]
print[bin[x | y]]
# 11
# 0b1011
nguồn. and_or_bit. py
Bitwise XOR. print[x | y]
print[bin[x | y]]
# 11
# 0b1011
0
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
Bitwise XOR với toán tử
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
0________số 8
nguồn. and_or_bit. py
Đầu vào và đầu ra cho từng bit của AND, OR và XOR như sau
Đầu vào 1 Đầu vào 2 ANDORXOR11110100110101100000Liên kết được tài trợ
Hoạt động bitwise với số nguyên âm
Các hoạt động bitwise trên số nguyên âm được xử lý như thể các giá trị được biểu thị bằng phần bù của hai
- Phần bù của hai - Wikipedia
Tuy nhiên, lưu ý rằng nếu bạn chuyển đổi một số nguyên âm thành chuỗi nhị phân bằng cách sử dụng
print[x ^ y]
print[bin[x ^ y]]
# 3
# 0b11
0 hoặc print[x ^ y]
print[bin[x ^ y]]
# 3
# 0b11
3, dấu trừ sẽ được sử dụng thay cho định dạng phần bù của haiNếu bạn muốn lấy một chuỗi được biểu thị bằng biểu diễn bù hai, hãy lấy theo chiều bit VÀ
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
9 của số chữ số tối đa được yêu cầu, ví dụ: print[x | y]
print[bin[x | y]]
# 11
# 0b1011
62 [= print[x | y]
print[bin[x | y]]
# 11
# 0b1011
63] cho 4 bit, print[x | y]
print[bin[x | y]]
# 11
# 0b1011
64 cho 8 bit và print[x | y]
print[bin[x | y]]
# 11
# 0b1011
65 cho 16 bit- Chuyển đổi nhị phân, bát phân, thập phân và thập lục phân trong Python
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
8nguồn. and_or_bit. py
Bitwise KHÔNG, đảo ngược. print[x | y]
print[bin[x | y]]
# 11
# 0b1011
1
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
Toán tử
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
1 mang lại phép nghịch đảo bit. Đảo ngược bitwise của print[x | y]
print[bin[x | y]]
# 11
# 0b1011
68 được định nghĩa là print[x | y]
print[bin[x | y]]
# 11
# 0b1011
69- 6. Biểu thức - Phép toán số học đơn nguyên và bitwise — Python 3. 9. 1 tài liệu
Nếu giá trị đầu vào
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
68 được coi là phần bù của hai và tất cả các bit được đảo ngược, thì nó tương đương với print[x | y]
print[bin[x | y]]
# 11
# 0b1011
69Chuyển đổi
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
72 thành một chuỗi không dẫn đến một chuỗi có các bit của giá trị ban đầu bị đảo ngượcprint[x | y]
print[bin[x | y]]
# 11
# 0b1011
6nguồn. and_or_bit. py
Bằng cách thực hiện phép toán AND để tạo một chuỗi biểu diễn phần bù của hai chuỗi, bạn có thể thu được một chuỗi có đảo ngược các bit
Ví dụ: để lấy chuỗi đảo ngược bit gồm 4 chữ số, hãy chỉ định
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
73 với print[x ^ y]
print[bin[x ^ y]]
# 3
# 0b11
3 và đệm nó bằng số khôngprint[x | y]
print[bin[x | y]]
# 11
# 0b1011
7nguồn. and_or_bit. py
Dịch chuyển bit. print[x | y]
print[bin[x | y]]
# 11
# 0b1011
2, print[x | y]
print[bin[x | y]]
# 11
# 0b1011
3
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
Dịch chuyển trái và dịch chuyển phải với người vận hành
print[x | y]
print[bin[x | y]]
# 11
# 0b1011
2, print[x | y]
print[bin[x | y]]
# 11
# 0b1011
3print[x | y]
print[bin[x | y]]
# 11
# 0b1011
6nguồn. and_or_bit. py
Đối với các giá trị âm, bit dấu được mở rộng và dịch chuyển, các dấu dương và âm không thay đổi. Các giá trị âm được coi là có
print[x ^ y]
print[bin[x ^ y]]
# 3
# 0b11
4 vô hạn ở phía bên tráiprint[x | y]
print[bin[x | y]]
# 11
# 0b1011
8nguồn. and_or_bit. py
Thật khó hiểu nếu bạn coi nó như một giá trị số, vì vậy tốt hơn là coi nó như một chuỗi bù hai