Bitwise operators in python are characters or symbols that are used to manipulate the individual bits in a number or a given piece of data.
At the basic or machine level, computers process and store information in streams of 0s and 1s. Hence, every piece of text or data in the computer is internally represented in binaries.
Though as a programmer, you don’t have to worry about the intricacies of data encoding or decoding, there are times when it becomes pertinent.
Bitwise operators in Python
Any operation that involves the use or manipulation of data in its binary form is known as a bitwise operation. Since these operations are performed at the binary level, they are executed faster by the computer.
For this, bitwise operations are widely used in encryptions, communications over networks, graphics and much more.
In Python, bitwise operations are done using the bitwise operators. With these operators, you can perform all sorts of data manipulation on data at the basic or binary level.
The followings are the bitwise operators in python and their meanings.
Operator | Meaning |
& | Bitwise AND |
| | Bitwise OR |
~ | Bitwise NOT |
^ | XOR |
<< | Bitwise left shift |
>> | Bitwise right shift |
Bitwise AND operator
This operator is represented with the symbol &. For each given position in the operands, if the corresponding bits have the value of 1, the outcome for the position is 1. Contrary to this, the outcome is 0.
You can also determine the outcome of the bitwise AND operation at any given position using the formula:
(A & B)i = Ai x Bi
This is demonstrated in the figure below, where the respective bits in a given position are multiplied.
For better understanding, the following code expressed numbers in binary forms and outcomes are converted to binary.
#bitwise and num1 = 0b1101 num2 = 0b1011 result = bin(num1 & num2) print(result) num3 = 0b100 num4 = 0b101 result = bin(num1 & num2) print(result) #bitwise and on integers num5 = 15 num6 = 5 result = num5 & num6 print(result)
output
0b1001 0b1001 5
Bitwise OR operator
This operator returns 1 if one or both operands have a binary digit of 1 in any given position. If both operands have 0 at any given position, the outcome is 0.
The bitwise operator or is represented with the symbol |.
Also, you can determine the outcome of OR bitwise operation using the formula below.
(A | B)i = Ai + Bi
In the illustration above, 1 is returned if the sum of the binary digits in a given position is 1 or greater than 1. Now, let’s further demonstrate it using the code below.
#bitwise or num1 = 0b1101 num2 = 0b1011 result = bin(num1 | num2) print(result) num3 = 0b100 num4 = 0b101 result = bin(num3 | num4) print(result)
output
0b1111 0b101
Bitwise XOR operator
The bitwise XOR operator returns 1 if the bits in a given position are opposing values. That is, if the corresponding bits in a given position are both 1 or both 0, the outcome is 0.
The bitwise operator xor is represented with the symbol ^.
You can determine the outcome of the XOR bitwise operation using the formula below.
(A | B)i = (Ai + Bi) mod 2
In the illustration below, the bits in a given position are first added. Then, the resulting value is divided by 2 and the modulus or remainder becomes the outcome.
Below is a Python code involving the xor bitwise operator.
#bitwise operator xor num1 = 0b1101 num2 = 0b1011 result = bin(num1 ^ num2) print(result) num3 = 0b110111 num4 = 0b101011 result = bin(num3 ^ num4) print(result)
output
0b110 0b11100
NOT Bitwise Operator
Most bitwise operators work on two sets of operands with the exception of the bitwise NOT operator. The not bitwise operator is a unary operator and is represented with the symbol ~.
It is used to perform logical negation and the outcome is determined with the formula below:
~Ai = 1 – Ai
This is illustrated in the figure below:
More examples are provided in the code below:
[bitwise_not.py]
#bitwise not num = 0b10 result = bin(~num) print(result) num = 7 result = ~num print(result)
output
-0b11 -8
Bitwise LEFT SHIFT operator
This operator moves the bits of the first operand to the left. The second operand provides the number of moves to be made on the first operand. At the same time, an equal number of zeros are padded on the right.
The left shift bitwise operator is represented with the symbol <<.
Here is how it is implemented in Python.
#bitwise leftshift num = 0b1001 result = bin(num << 1) print(result) result = bin(num << 2) print(result) result = bin(num << 3) print(result)
output
0b10010 0b100100 0b1001000
Also, the left shift bitwise operator can be evaluated using the following formula.
A << n = Ax2n
So, 5 << 2 is the same thing as:
5×22 = 5×4 = 20
print(5 << 2)
output
20
Bitwise RIGHT SHIFT operator
The right shift bitwise operator moves the bits of the first operand to the right. The second operand provides the number of moves to be made on the first operand. It moves the bits to the right while padding zeros to the left. It is represented with the symbol >>.
The code below demonstrates right shift bitwise operations.
[bitwise_rightshift.py]
#bitwise right shift num = 0b1001 result = bin(num >> 1) print(result) result = bin(num >> 2) print(result) result = bin(num >> 3) print(result) result = bin(num >> 4) print(result)
output
0b100 0b10 0b1 0b0
The outcome of a right shift bitwise operation can be determined by the formula below with floor division:
A >> n = A/2n
5 >> 2 is the same thing as:
5//2×2 = 5//4 = 1
print(5 >> 2)
output
1
Shorthands with bitwise operators
Just like in arithmetic operators, you can use the bitwise operators in short forms.
For instance:
[code language="python"] num += 2 num &= 2
Let’s look at how you can use this operator in compound forms.
Operator | Compound operator |
& | &= |
| | |= |
^ | ^= |
<< | <<= |
>> | >>= |
[compound bitwise operators code]
#shorthands for bitwise operators #bitwise and operator num = 0b1110 num &= 0b1011 print(bin(num)) #bitwise or operator num = 0b1110 num |= 0b1011 print(bin(num)) #bitwise xor operator num = 0b1110 num &= 0b1011 print(bin(num)) #bitwise leftshift operator num = 0b1110 num <<= 1 print(bin(num)) #bitwise right shift operator num = 0b1110 num >>= 1 print(bin(num))
output
0b1010 0b1111 0b1010 0b11100 0b111
Conclusion
As much as bitwise operations are not compulsory knowledge, no knowledge is a waste. You never can tell, you may find yourself working on projects where knowledge of bitwise operations is requisite.
Many software systems rely on bit processing, such as networking protocols, data storage and file systems, and binary file systems. If you are working on any application that deals directly with the machine, you would to be knowledgeable in bitwise operations.