Ready to add another cool tool to your Python toolkit? Today, we’re going to chat about the XOR operation. Now, if you’re thinking, “XOR sounds like something out of a sci-fi movie,” don’t worry! It’s actually a pretty simple and super useful concept in Python
Python XOR, also known as Exclusive OR, is a type of logical operation used primarily with binary numbers. The XOR operation takes two operands and returns a boolean value of True if exactly one of the operands is True, and False otherwise. In Python, the XOR operation is represented by the caret operator (^).
In Python, you can use the XOR operation for various purposes such as error detection, cryptography, and data manipulation. It plays an important role in many algorithms and data-processing techniques. Having a good grasp of XOR operations in Python will help you find new ways of solving problems.
Before you start using XOR operations in your code, it’s important that you understand the basics of it. Let’s look at some important concepts you should know when using XOR operations.
Understanding XOR in Python
In this section, we’ll look at what XOR is, how you can use it with boolean values, and its syntax in Python. Let’s get into it!
What is XOR?
In Python, XOR is a bitwise operation that allows you to compare two binary numbers bit by bit.
If the bits being compared are identical, the XOR operator returns 0 (False), and if the bits are different, it returns 1 (True).
The XOR operator is also known as the “exclusive or” because it returns true exclusively when the two bits being compared are different.
What is the Syntax of Python XOR?
The Python XOR operator is represented by the ^ symbol.
You can apply it directly to integer operands.
The following is an example illustrating how to use the XOR operator in Python:
a = 5 b = 3 result = a ^ b
When using the XOR operator, Python automatically converts the integer values to their binary formats. It then performs the XOR operation bit by bit in binary form, and then returns the result as an integer.
Thus, in the example above, the binary representation of 5 (0101) and 3 (0011) are XORed together, resulting in the binary string 0110, which is equal to integer 6.
How to Implement XOR in Python
Python offers multiple methods for implementing XOR operations, such as the ^ bitwise XOR operator, logical operators, and the xor function from the operator module.
In this section, we’ll go over the following:
- Implementing Bitwise XOR Operator
- Implementing Logical XOR Operators
- Implementing XOR using Built-in XOR Module
1. Implementing Bitwise Operator
In Python, you can perform the bitwise XOR operation using the ^ operator. The operator takes two integer operands, converts them into binary format, and then performs the XOR operation bit-by-bit.
The result of the bitwise XOR operation is an integer value. The following example demonstrates the usage of the bitwise XOR operator.
a = 5 # Binary representation: 0101 b = 3 # Binary representation: 0011 result = a ^ b # Binary result: 0110, Decimal result: 6 print(result)
2. Implementing Logical XOR Operators
You can implement a logical XOR in Python using logical operators and and or. Logical XOR evaluates to True if both operand values are different, otherwise, it evaluates to False.
The following is an example of using logical operators to implement a logical XOR function.
def logical_xor(a, b): return (a and not b) or (not a and b) x = True y = False result = logical_xor(x, y) print(result)
The output of this script is given below:
3. Implementing XOR Using Built-in XOR Module
Python also provides the xor function in the built-in operator module, which you can use to perform bitwise XOR operations on integers and logical XOR operations on booleans.
The following is an example of using Python’s built-in XOR module:
from operator import xor x = 5 y = 3 z = True w = False bitwise_result = xor(x, y) # Output: 6 logical_result = xor(z, w) # Output: True print(bitwise_result) print(logical_result)
The output of this script is given below:
The two boolean values result in a True value, whereas the integer values give 6 as output.
What Are the Types of Bitwise Operations in Python?
In Python, you can perform bitwise operations on individual bits of binary numbers.
Some common bitwise operators include Bitwise AND, Bitwise OR, Bitwise NOT, Bitwise Left Shift, and Bitwise Right Shift.
The following sections provide a brief overview of each bitwise operation.
1. What is Bitwise AND?
In Python, a bitwise AND operator is represented by the symbol &. It is used to compare two integers at the bit level. For each bit in the resulting binary number, if the corresponding bits in both input numbers are 1, then the resulting bit is 1; otherwise, it is 0.
The following example demonstrates Bitwise AND operator in Python:
A = 1100 B = 1010 A & B # Output:1000
The output of the code is 1000. The following steps demonstrate how Python computed 1000 as output:
We start from the rightmost bit (also known as the least significant bit):
- 0 (from B) AND 0 (from A) results in 0
- 1 (from B) AND 0 (from A) results in 0
- 0 (from B) AND 1 (from A) results in 0
- 1 (from B) AND 1 (from A) results in 1
So, when you perform A AND B, the result is 1000.
2. What is Bitwise OR?
The bitwise OR operator is represented by the symbol |. It is used to compare two integers at the bit level.
For each bit in the resulting binary number, if the corresponding bits in at least one of the input numbers are 1, then the resulting bit is 1; otherwise, it is 0.
The following is an example of bitwise OR in Python:
A = 1100 B = 1010 A | B # Output: 1110
The output of the operation is 1110. The following steps demonstrate how Python computed 1110 as output:
Starting from the rightmost bit:
- 0 (from B) OR 0 (from A) results in 0
- 1 (from B) OR 0 (from A) results in 1
- 0 (from B) OR 1 (from A) results in 1
- 1 (from B) OR 1 (from A) results in 1
So, when you perform A OR B, the result is 1110.
3. What is Bitwise NOT?
The bitwise NOT operator is represented by the symbol ~. It is used to invert the bits (i.e., change ‘0’ to ‘1’ and ‘1’ to ‘0’) of an integer.
In the example below, we invert the bits of A by performing a bitwise NOT operation on it.
A = 1100 ~A = 0011
This is because NOT 1 results in 0, and NOT 0 results in 1.
4. What is Bitwise Left Shift?
The bitwise left shift operator is represented by the symbol <<.
This operator lets you move all the bits in the binary representation of a number to the left by a specified number of positions. It fills the vacancies with ‘0’.
The following is an example of a bitwise left shift:
A = 1100 # When we shift A two places to the left, we get: A << 2 = 110000
The original two rightmost digits (00) get shifted to the left by two places and two zeros are added to the right end, thus the resulting binary number is 110000.
5. What is Bitwise Right Shift?
The bitwise right shift operator is represented by the symbol >>. It moves all the bits in the binary representation of a number to the right by a specified number of positions. It discards the shifted bits.
The following is an example of a bitwise right shift:
A = 1100 #When we shift A two places to the right, we get: A >> 2 = 11
The original two rightmost digits (00) get dropped, and the resulting binary number is 11.
These bitwise operators are commonly used to perform operations on integers and binary numbers in Python. It allows you to efficiently manipulate binary data.
How to Handle Errors When Working With XOR in Python
When working with XOR operations in Python, you can run into errors from time to time. TypeError is a common error that occurs when using XOR operations.
TypeErrors occur when you apply an operation or function to an object of an inappropriate type.
In the context of Python XOR (exclusive or) operations, a common example of a TypeError is when using incompatible types for bitwise operators.
Since bitwise XOR (^) is only defined for specific built-in data types such as int, bool, and a few others, this can lead to TypeErrors if used incorrectly.
The following is an example of TypeError when using XOR operators:
a = 5 b = "string" result = a ^ b # Raises TypeError
To handle this error, you may use a try-except block:
try: result = a ^ b except TypeError: print("Incompatible types for XOR operation")
Since a and b have different data types, therefore, it will raise a TypeError. The following is the output of the script:
Now that you are familiar with the basics of performing XOR operations, let’s look at some advanced use cases of XOR.
To learn more about handling errors in Python, check the following video out:
What Are Advanced XOR Techniques?
In this section, we’ll look at 3 advanced techniques for using XOR operations. Specifically, we will look at the following:
- Python XOR with NumPy
- Using XOR in Mathematical Operations
- Sequence and Protocol Implementations
1. Python XOR With NumPy
The following is an example of using NumPy to perform XOR operations:
import numpy as np x1 = np.array([True, False, True]) x2 = np.array([False, True, True]) result = np.logical_xor(x1, x2) print(result)
In this Python script, we have two arrays, x1 and x2. We apply the logical ‘exclusive OR’ (XOR) operation on these arrays using the np.logical_xor function, which results in a new array.
This array, when printed, gives the output: [True True False], which is the result of the XOR operation for each corresponding pair of elements in x1 and x2.
The output is given below:
2. Using XOR in Mathematical Operations
You can use XOR in various mathematical operations, such as finding the absolute value of a number without using conditionals.
The following is an example of using XOR in mathematical operations:
def xor_abs(x): return (x ^ (x >> 31)) - (x >> 31) negative_number = -5 print(xor_abs(negative_number))
This Python script computes the bitwise XOR of the input number and its binary representation with the sign bit shifted to the first operand, and then subtracts the shifted value.
3. Using XOR for Sequence and Protocol Implementations
You can also use XOR in sequence and protocol-related operations.
The following example demonstrates generating unique keys for a dictionary that holds integers as keys with XOR:
def xor_key(x1, x2): return x1 ^ x2 existing_keys = [2, 4, 5] choice = 3 unique_key = xor_key(existing_keys[-1], choice) print(unique_key)
This example demonstrates the use of XOR on the last element of existing_keys and a custom choice to generate a new unique key.
To use XOR to compute the parity of the number of matches in two sequences, you can use the following code:
sequence_1 = [1, 2, 3, 4, 5] sequence_2 = [1, 2, 2, 4, 6] matches = sum(x1 ^ x2 == 0 for x1, x2 in zip(sequence_1, sequence_2)) parity = matches % 2 print(parity)
This example iterates through two sequences, evaluates the XOR between their corresponding elements, finds the number of matches in which the XOR is 0, and computes the parity of the matches.
As we close this discussion of Python’s XOR operation, let’s focus on why understanding this logic operator is crucial for you.
XOR operators play a pivotal role in various fields of computer science, such as error detection and correction, cryptography, and logical computations.
When you learn and apply XOR, you’re adding an important tool to your programming toolbox. XOR operations are useful in array manipulations, improving memory efficiency, and even in algorithm-based problem-solving. XOR operation also helps you understand how data is manipulated at the fundamental.
Using XOR and other bitwise operators is a crucial component of your coding journey. They bring you closer to the machine-level understanding of your code, and in doing so, equip you with a more comprehensive programming language fluency.