Làm cách nào để thực hiện XOR trên danh sách bằng Python?

Toán tử XOR theo bit của Python

>>> 31 ^ 15
16
4 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
16
5 và
>>> 31 ^ 15
16
6. 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
16
7 được dịch sang phép toán nhị phân
>>> 31 ^ 15
16
8, kết quả là
>>> 31 ^ 15
16
9 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
9
0 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
9
1 [số thập phân 32] và
>>> 0 ^ 1
1
>>> 0 ^ 3
3
>>> 3 ^ 5
6
>>> 33 ^ 129
160
>>> 15 ^ 7
8
>>> 14 ^ 7
9
2 [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
9
3 [số thập phân 48]

First Operand
>>> 31 ^ 15
16
5100000Second Operand
>>> 31 ^ 15
16
6010000
>>> 31 ^ 15
16
4110000

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
16
511111Second Operand
>>> 31 ^ 15
16
601111
>>> 31 ^ 15
16
410000

Biểu diễn thập phân của chuỗi bit

>>> 0 ^ -1
-1
>>> 0 ^ -3
-3
>>> -3 ^ -5
6
0 là 16

Python Bitwise ^ Ví dụ toán tử

Đây là kết quả của toán tử XOR bitwise

>>> 31 ^ 15
16
4 khi được áp dụng cho một vài toán hạng số nguyên ví dụ
>>> 31 ^ 15
16
5 và
>>> 31 ^ 15
16
6

x [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
6
4 làm mẫu bit cho
>>> 0 ^ -1
-1
>>> 0 ^ -3
-3
>>> -3 ^ -5
6
5 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án
    import 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
16
4 khi được áp dụng cho toán hạng số nguyên âm ví dụ
>>> 31 ^ 15
16
5 và
>>> 31 ^ 15
16
6

x [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]
# 1
6 và gọi
import numpy as np

my_list = [1, 2, 3, 4, 5]
res = np.bitwise_xor.reduce[my_list]
print[res]
# 1
7

Đâ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]
# 1
8 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]
# 1
9,
import numpy as np

my_set = [1, 2, 3, 4, 5]
res = np.bitwise_xor.reduce[my_set]
print[res]
# 1
0,
import numpy as np

my_set = [1, 2, 3, 4, 5]
res = np.bitwise_xor.reduce[my_set]
print[res]
# 1
1,
import numpy as np

my_set = [1, 2, 3, 4, 5]
res = np.bitwise_xor.reduce[my_set]
print[res]
# 1
2 và
import numpy as np

my_set = [1, 2, 3, 4, 5]
res = np.bitwise_xor.reduce[my_set]
print[res]
# 1
3

Pos 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]
# 1
6 và gọi
import numpy as np

my_set = [1, 2, 3, 4, 5]
res = np.bitwise_xor.reduce[my_set]
print[res]
# 1
5

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]
# 1
6 và
import numpy as np

my_set = [1, 2, 3, 4, 5]
res = np.bitwise_xor.reduce[my_set]
print[res]
# 1
7 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]
# 1
8 và
import numpy as np

my_set = [1, 2, 3, 4, 5]
res = np.bitwise_xor.reduce[my_set]
print[res]
# 1
9. 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
16
4, 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]
# 1
6 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]
# 1
6

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
False
3= 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
16
5. Biểu thức gán XOR bitwise
>>> True ^ True
False
>>> True ^ False
True
>>> False ^ True
True
>>> False ^ False
False
3= y là đường cú pháp cho
>>> True ^ True
False
>>> True ^ False
True
>>> False ^ True
True
>>> False ^ False
False
6 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
False
7 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
16
5 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
False
9 dunder cho phép biểu thức
>>> x = 1
>>> y = 2
>>> x ^= y
>>> x
3
>>> y
2
0 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
False
9 mà vẫn cố sử dụng biểu thức
>>> x = 1
>>> y = 2
>>> x ^= y
>>> x
3
>>> y
2
2y, Python sẽ tăng một giá trị
>>> x = 1
>>> y = 2
>>> x ^= y
>>> x
3
>>> y
2
3

>>> 31 ^ 15
16
0

đầu ra

>>> 31 ^ 15
16
1

Để khắc phục điều này

>>> x = 1
>>> y = 2
>>> x ^= y
>>> x
3
>>> y
2
4, chỉ cần xác định phương thức
>>> True ^ True
False
>>> True ^ False
True
>>> False ^ True
True
>>> False ^ False
False
9 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
2
6 cho số nguyên thập phân
>>> x = 1
>>> y = 2
>>> x ^= y
>>> x
3
>>> y
2
7 và
>>> x = 1
>>> y = 2
>>> x ^= y
>>> x
3
>>> y
2
8 cho số nguyên thập phân
>>> x = 1
>>> y = 2
>>> x ^= y
>>> x
3
>>> y
2
9 dưới dạng nhận xét ở cột bên phải

Toá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
2
1. 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
2
2~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
2
3.
>>> x = 1
>>> y = 2
>>> x = x ^ y
>>> x
3
>>> y
2
4^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
2
5>>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
2
6> x = 1 >>> y = 2 >>> x = x ^ y >>> x 3 >>> y 28
>>> x = 1
>>> y = 2
>>> x = x ^ y
>>> x
3
>>> y
2
9
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
0
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
1
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
2
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
3
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
4
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
5
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
6
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
7
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
8
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
9

Đâ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
16
00. Chúng tôi đã đánh dấu toán tử tương ứng này trong mã

>>> 31 ^ 15
16
2

đầu ra là

>>> 31 ^ 15
16
3

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

Danh sách liên kết XOR trong Python là gì?

Danh sách liên kết đôi hiệu quả bộ nhớ này được gọi là Danh sách liên kết XOR hoặc Hiệu quả bộ nhớ vì danh sách sử dụng thao tác XOR theo bit để tiết kiệm dung lượng cho một địa chỉ. Trong danh sách liên kết XOR, thay vì lưu trữ địa chỉ bộ nhớ thực tế, mỗi nút lưu trữ XOR địa chỉ của nút trước và nút tiếp theo.

Thao tác XOR được thực hiện như thế nào?

XOR so sánh hai bit đầu vào và tạo một bit đầu ra . logic rất đơn giản. Nếu các bit giống nhau, kết quả là 0. Nếu các bit khác nhau, kết quả là 1.

Chủ Đề