Toán tử XOR theo bit của Python
>>> 31 ^ 15 164 thực hiện phép XOR logic trên từng vị trí bit trên các biểu diễn nhị phân của số nguyên
>>> 31 ^ 15 165 và
>>> 31 ^ 15 166. Mỗi bit đầu ra đánh giá là 1 khi và chỉ khi chính xác một trong hai bit đầu vào ở cùng một vị trí là 1. Ví dụ: biểu thức số nguyên
>>> 31 ^ 15 167 được dịch sang phép toán nhị phân
>>> 31 ^ 15 168, kết quả là
>>> 31 ^ 15 169 vì đối với ba vị trí cuối cùng, chính xác một bit là 1
Khi bạn xem qua bài viết, bạn có thể xem video giải thích của tôi tại đây
Python Bitwise XOR ^ Toán tử
Xem video này trên YouTube
Trong ví dụ này, bạn áp dụng toán tử XOR theo bit cho hai số nguyên 32 và 16
>>> 32 ^ 16 48
Biểu thức
>>> 0 ^ 1 1 >>> 0 ^ 3 3 >>> 3 ^ 5 6 >>> 33 ^ 129 160 >>> 15 ^ 7 8 >>> 14 ^ 7 90 hoạt động trên các biểu diễn bit
>>> 0 ^ 1 1 >>> 0 ^ 3 3 >>> 3 ^ 5 6 >>> 33 ^ 129 160 >>> 15 ^ 7 8 >>> 14 ^ 7 91 [số thập phân 32] và
>>> 0 ^ 1 1 >>> 0 ^ 3 3 >>> 3 ^ 5 6 >>> 33 ^ 129 160 >>> 15 ^ 7 8 >>> 14 ^ 7 92 [số thập phân 16] và thực hiện XOR theo bit dẫn đến nhị phân
>>> 0 ^ 1 1 >>> 0 ^ 3 3 >>> 3 ^ 5 6 >>> 33 ^ 129 160 >>> 15 ^ 7 8 >>> 14 ^ 7 93 [số thập phân 48]First Operand
>>> 31 ^ 15 165100000Second Operand
>>> 31 ^ 15 166010000
>>> 31 ^ 15 164110000
Tương tự, chúng ta hãy xem một ví dụ được sửa đổi một chút để giới thiệu toán tử XOR theo bit
>>> 31 ^ 15 16
Bạn có thể thấy điều này trong hình dung sau
First Operand>>> 31 ^ 15 16511111Second Operand
>>> 31 ^ 15 16601111
>>> 31 ^ 15 16410000
Biểu diễn thập phân của chuỗi bit
>>> 0 ^ -1 -1 >>> 0 ^ -3 -3 >>> -3 ^ -5 60 là 16
Python Bitwise ^ Ví dụ toán tử
Đây là kết quả của toán tử XOR bitwise
>>> 31 ^ 15 164 khi được áp dụng cho một vài toán hạng số nguyên ví dụ
>>> 31 ^ 15 165 và
>>> 31 ^ 15 166x [int]y [int]x [nhị phân]y [nhị phân]x ^ y [nhị phân]x ^ y [int]01011103001111335001101010110633129000100001010000001010100000160157011110011101000814701110100111
Bạn có thể xem những ví dụ đó trong tập lệnh Python sau
>>> 0 ^ 1 1 >>> 0 ^ 3 3 >>> 3 ^ 5 6 >>> 33 ^ 129 160 >>> 15 ^ 7 8 >>> 14 ^ 7 9
Tiếp theo, bạn sẽ học cách sử dụng toán tử trên số nguyên âm. Nhưng trước tiên, bạn cần hiểu cách các số nguyên âm được biểu diễn ngay từ đầu. Điều này sẽ nâng cao kỹ năng khoa học máy tính của bạn, vì vậy hãy tiếp tục đọc. ??
Biểu diễn số nguyên âm trong nhị phân
Python sử dụng cái gọi là nhị phân bổ sung để biểu diễn các số nguyên âm. Bit đầu tiên của nhị phân bù là dấu [0. tích cực, 1. tiêu cực]. Tất cả các bit còn lại mã hóa số. Bạn viết một số âm
>>> 0 ^ -1 -1 >>> 0 ^ -3 -3 >>> -3 ^ -5 64 làm mẫu bit cho
>>> 0 ^ -1 -1 >>> 0 ^ -3 -3 >>> -3 ^ -5 65 và lật tất cả các bit từ 1 thành 0 và từ 0 thành 1 [phần bù]
Đây là hai ví dụ đơn giản
- Để đại diện cho
>>> 0 ^ -1 -1 >>> 0 ^ -3 -3 >>> -3 ^ -5 6
6 sử dụng 8 bit, trước tiên bạn tính toán>>> 0 ^ -1 -1 >>> 0 ^ -3 -3 >>> -3 ^ -5 6
7 và sau đó lật tất cả các bit để tính toán>>> 0 ^ -1 -1 >>> 0 ^ -3 -3 >>> -3 ^ -5 6
8 - Để đại diện cho
>>> 0 ^ -1 -1 >>> 0 ^ -3 -3 >>> -3 ^ -5 6
9 sử dụng 8 bit, trước tiên bạn tính toánimport numpy as np my_list = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_list] print[res] # 1
0 làimport numpy as np my_list = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_list] print[res] # 1
1 ở định dạng nhị phân. Sau đó, bạn bổ sung tất cả các bit để xác định nhị phân âm [bổ sung]import numpy as np my_list = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_list] print[res] # 1
2
Hãy sử dụng kiến thức này trong một vài ví dụ để giới thiệu hoạt động của toán tử XOR bitwise trên các số nguyên âm
Python Bitwise XOR ^ Ví dụ về số nguyên âm
Đây là kết quả của toán tử XOR bitwise
>>> 31 ^ 15 164 khi được áp dụng cho toán hạng số nguyên âm ví dụ
>>> 31 ^ 15 165 và
>>> 31 ^ 15 166x [int]y [int]x [nhị phân]y [nhị phân]x ^ y [nhị phân]x ^ y [int]0-1000000001111111111111111-10-3000000001111110111111101-3-3-51111110111111011000001106
Bạn có thể xem những ví dụ đó trong đoạn script sau
>>> 0 ^ -1 -1 >>> 0 ^ -3 -3 >>> -3 ^ -5 6
Danh sách và tập hợp Bitwise XOR của Python
Để thực hiện thao tác XOR theo bit trên tất cả các phần tử trong danh sách số nguyên nhất định, hãy nhập thư viện NumPy bằng cách sử dụng
import numpy as np my_list = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_list] print[res] # 16 và gọi
import numpy as np my_list = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_list] print[res] # 17
Đây là một ví dụ
import numpy as np my_list = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_list] print[res] # 1
Bạn có thể xem phép tính trong bảng sau—hàng cuối cùng là kết quả của phép toán XOR theo bit trên tất cả các phần tử trong danh sách
import numpy as np my_list = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_list] print[res] # 18 tương ứng với các nhị phân
import numpy as np my_list = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_list] print[res] # 19,
import numpy as np my_set = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_set] print[res] # 10,
import numpy as np my_set = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_set] print[res] # 11,
import numpy as np my_set = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_set] print[res] # 12 và
import numpy as np my_set = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_set] print[res] # 13Pos 0Pos 1Pos 2Pos 3000100100011010001010001
Để tính toán điều này, bạn phải thực hiện XOR dọc theo từng cột nhất định, hai hàng cùng một lúc. Nếu chúng có các bit khác nhau, kết quả trung gian là 1, nếu không thì 0. Sau đó, bạn sử dụng kết quả và so sánh nó với hàng tiếp theo, v.v. Kết quả cuối cùng là 1
Ngoài ra, nếu bạn muốn thực hiện XOR theo bit trên tất cả các phần tử trong một tập hợp, bạn có thể sử dụng cùng một ý tưởng nhập thư viện NumPy bằng cách sử dụng
import numpy as np my_list = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_list] print[res] # 16 và gọi
import numpy as np my_set = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_set] print[res] # 15
import numpy as np my_set = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_set] print[res] # 1
Python Bitwise XOR Bool
Các giá trị Boolean
import numpy as np my_set = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_set] print[res] # 16 và
import numpy as np my_set = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_set] print[res] # 17 có thể được biểu diễn ngữ nghĩa bằng một bit duy nhất
import numpy as np my_set = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_set] print[res] # 18 và
import numpy as np my_set = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_set] print[res] # 19. Do đó, nếu bạn áp dụng phép toán XOR theo bit trên hai giá trị Boolean bằng cách sử dụng
>>> 31 ^ 15 164, thì kết quả là
import numpy as np my_set = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_set] print[res] # 16 khi và chỉ khi chính xác một trong các toán hạng là
import numpy as np my_set = [1, 2, 3, 4, 5] res = np.bitwise_xor.reduce[my_set] print[res] # 16
Dưới đây là bốn cách để áp dụng toán tử XOR bitwise cho các giá trị Boolean
>>> True ^ True False >>> True ^ False True >>> False ^ True True >>> False ^ False False
Bài tập Python Bitwise XOR [Bằng nhau]
Ký hiệu bằng sau toán tử OR theo bit [
>>> True ^ True False >>> True ^ False True >>> False ^ True True >>> False ^ False False3= y] thực hiện thao tác gán XOR theo bit. Nó tính toán XOR theo bit trước và gán kết quả cho biến
>>> 31 ^ 15 165. Biểu thức gán XOR bitwise
>>> True ^ True False >>> True ^ False True >>> False ^ True True >>> False ^ False False3= y là đường cú pháp cho
>>> True ^ True False >>> True ^ False True >>> False ^ True True >>> False ^ False False6 y giống hệt nhau về mặt ngữ nghĩa. Giá trị trả về của toán tử là
>>> True ^ True False >>> True ^ False True >>> False ^ True True >>> False ^ False False7 nhưng nó cập nhật toán hạng đầu tiên với kết quả của phép toán
Ở đây bạn có thể thấy rằng biến
>>> 31 ^ 15 165 thay đổi sau khi áp dụng toán tử gán
>>> x = 1 >>> y = 2 >>> x ^= y >>> x 3 >>> y 2
Đây là phiên bản giống hệt về mặt ngữ nghĩa của phiên bản này mà không có toán tử gán
>>> x = 1 >>> y = 2 >>> x = x ^ y >>> x 3 >>> y 2
Quá tải Bitwise XOR của Python
Bạn có thể định nghĩa toán tử XOR bitwise của riêng mình trên một lớp tùy chỉnh bằng cách nạp chồng phương thức
>>> True ^ True False >>> True ^ False True >>> False ^ True True >>> False ^ False False9 dunder cho phép biểu thức
>>> x = 1 >>> y = 2 >>> x ^= y >>> x 3 >>> y 20 trên các đối tượng tùy chỉnh của bạn
Đây là một ví dụ
class Data: def __init__[self, data]: self.data = data def __xor__[self, other]: return Data[self.data ^ other.data] x = Data[3] y = Data[4] res = x ^ y print[res.data] # 7
Ghi chú. nếu bạn quên ghi đè lên phương thức
>>> True ^ True False >>> True ^ False True >>> False ^ True True >>> False ^ False False9 mà vẫn cố sử dụng biểu thức
>>> x = 1 >>> y = 2 >>> x ^= y >>> x 3 >>> y 22y, Python sẽ tăng một giá trị
>>> x = 1 >>> y = 2 >>> x ^= y >>> x 3 >>> y 23
>>> 31 ^ 15 160
đầu ra
>>> 31 ^ 15 161
Để khắc phục điều này
>>> x = 1 >>> y = 2 >>> x ^= y >>> x 3 >>> y 24, chỉ cần xác định phương thức
>>> True ^ True False >>> True ^ False True >>> False ^ True True >>> False ^ False False9 như trong ví dụ hoạt động trước đó
Toán tử Bitwise và Phương pháp ma thuật
thực hiện các thao tác trên biểu diễn nhị phân [bit] của số nguyên. Bảng sau đây cung cấp tổng quan ngắn gọn về tất cả các toán tử bitwise hiện có. Lưu ý rằng chúng tôi cũng cung cấp biểu diễn nhị phân
>>> x = 1 >>> y = 2 >>> x ^= y >>> x 3 >>> y 26 cho số nguyên thập phân
>>> x = 1 >>> y = 2 >>> x ^= y >>> x 3 >>> y 27 và
>>> x = 1 >>> y = 2 >>> x ^= y >>> x 3 >>> y 28 cho số nguyên thập phân
>>> x = 1 >>> y = 2 >>> x ^= y >>> x 3 >>> y 29 dưới dạng nhận xét ở cột bên phảiToán tử TênMô tảVí dụ_______63_______0&Bitwise ANDThực hiện logic AND trên cơ sở từng chút một
>>> x = 1 >>> y = 2 >>> x = x ^ y >>> x 3 >>> y 21. Bitwise ORThực hiện phép toán OR logic trên cơ sở từng bit
>>> x = 1 >>> y = 2 >>> x = x ^ y >>> x 3 >>> y 22~Bitwise NOTThực hiện logic NOT trên cơ sở từng bit, đảo ngược từng bit sao cho 0 trở thành 1 và 1 trở thành 0. Tương tự như
>>> x = 1 >>> y = 2 >>> x = x ^ y >>> x 3 >>> y 23.
>>> x = 1 >>> y = 2 >>> x = x ^ y >>> x 3 >>> y 24^Bitwise XORThực hiện phép toán logic “độc quyền hoặc” trên cơ sở từng bit
>>> x = 1 >>> y = 2 >>> x = x ^ y >>> x 3 >>> y 25>>Dịch chuyển phải theo từng bit Dịch chuyển nhị phân của toán hạng bên trái sang phải theo số lượng vị trí được chỉ định trong toán hạng bên phải
>>> x = 1 >>> y = 2 >>> x = x ^ y >>> x 3 >>> y 26> x = 1 >>> y = 2 >>> x = x ^ y >>> x 3 >>> y 28
>>> x = 1 >>> y = 2 >>> x = x ^ y >>> x 3 >>> y 29
class Data: def __init__[self, data]: self.data = data def __xor__[self, other]: return Data[self.data ^ other.data] x = Data[3] y = Data[4] res = x ^ y print[res.data] # 70
class Data: def __init__[self, data]: self.data = data def __xor__[self, other]: return Data[self.data ^ other.data] x = Data[3] y = Data[4] res = x ^ y print[res.data] # 71
class Data: def __init__[self, data]: self.data = data def __xor__[self, other]: return Data[self.data ^ other.data] x = Data[3] y = Data[4] res = x ^ y print[res.data] # 72
class Data: def __init__[self, data]: self.data = data def __xor__[self, other]: return Data[self.data ^ other.data] x = Data[3] y = Data[4] res = x ^ y print[res.data] # 73
class Data: def __init__[self, data]: self.data = data def __xor__[self, other]: return Data[self.data ^ other.data] x = Data[3] y = Data[4] res = x ^ y print[res.data] # 74
class Data: def __init__[self, data]: self.data = data def __xor__[self, other]: return Data[self.data ^ other.data] x = Data[3] y = Data[4] res = x ^ y print[res.data] # 75
class Data: def __init__[self, data]: self.data = data def __xor__[self, other]: return Data[self.data ^ other.data] x = Data[3] y = Data[4] res = x ^ y print[res.data] # 76
class Data: def __init__[self, data]: self.data = data def __xor__[self, other]: return Data[self.data ^ other.data] x = Data[3] y = Data[4] res = x ^ y print[res.data] # 77
class Data: def __init__[self, data]: self.data = data def __xor__[self, other]: return Data[self.data ^ other.data] x = Data[3] y = Data[4] res = x ^ y print[res.data] # 78
class Data: def __init__[self, data]: self.data = data def __xor__[self, other]: return Data[self.data ^ other.data] x = Data[3] y = Data[4] res = x ^ y print[res.data] # 79
Đây là một ví dụ về cách thực hiện các toán tử bitwise này trên một lớp tùy chỉnh
>>> 31 ^ 15 1600. Chúng tôi đã đánh dấu toán tử tương ứng này trong mã
>>> 31 ^ 15 162
đầu ra là
>>> 31 ^ 15 163
Chris
Trong khi làm việc với tư cách là một nhà nghiên cứu trong các hệ thống phân tán, Dr. Christian Mayer tìm thấy tình yêu của mình với việc dạy sinh viên khoa học máy tính
Để giúp sinh viên đạt được mức độ thành công Python cao hơn, anh ấy đã thành lập trang web giáo dục lập trình Finxter. com. Ông là tác giả của cuốn sách lập trình nổi tiếng Python One-Liners [NoStarch 2020], đồng tác giả của loạt sách tự xuất bản Coffee Break Python, người đam mê khoa học máy tính, cộng tác viên tự do và chủ sở hữu của một trong 10 blog Python lớn nhất thế giới
Niềm đam mê của anh ấy là viết, đọc và mã hóa. Nhưng niềm đam mê lớn nhất của anh ấy là phục vụ các lập trình viên đầy tham vọng thông qua Finxter và giúp họ nâng cao kỹ năng của mình. Bạn có thể tham gia học viện email miễn phí của anh ấy tại đây