Python 程序设计讲义(15):Python 的数据运算——位运算
程序中的所有数据都是以二进制的形式存储的。位运算是指直接按照数值的二进制形式进行运算。位运算包括位逻辑运算与移位运算。
一、位逻辑运算
位逻辑运算是指对二进制数的每一位进行数值运算。Python 的位逻辑运算包括:位与运算、位或运算、位异或运算和取反运算。
1、位与运算
位与运算用符号 &
表示,将两个二进制数的每一位进行运算。如果相同位的数都为 1,则对应的结果位也为 1,若有一个不为 1,则对应的结果位为 0。运算时,如果两个二进制数位数不同,则再较短的二进制左边补 0。
例如:
a=0b1101
b=0b1010
print(a&b,bin(a&b))
a=12 #二进制为:1100
b=6 #二进制为:0110
print(a&b,bin(a&b))
运算结果为:
8 0b1000
4 0b100
2、位或运算
位或运算用符号 |
表示,将两个二进制数的每一位进行运算。如果相同位的数有一个为 1 或两个都为 1,则对应的结果位也为 1,如果两个都 0,则对应的结果位为 0。运算时,如果两个二进制数位数不同,则再较短的二进制左边补 0。
例如:
a=0b1101
b=0b1010
print(a|b,bin(a|b))
a=12 #二进制为:1100
b=6 #二进制为:0110
print(a|b,bin(a|b))
运算结果为:
15 0b1111
14 0b1110
3、位异或运算
位异或运算用符号 ^
表示,将两个二进制数的每一位进行运算。如果相同位的数不相同,则对应的结果位为 1,如果相同位的数相同,则对应的结果位为 0。运算时,如果两个二进制数位数不同,则再较短的二进制左边补 0。
例如:
a=0b1101
b=0b1010
print(a^b,bin(a^b))
a=12 #二进制为:1100
b=6 #二进制为:0110
print(a^b,bin(a^b))
运算结果为:
7 0b111
10 0b1010
4、取反运算
取反运算用符号 ~
表示,对二进制数进行取反操作。取反运算首先将二进制数加 1,然后取其负值。
例如:
a=0b1101
b=5 #二进制为:101
print(~a,bin(~a))
print(~b,bin(~b))
运算结果为:
-14 -0b1110
-6 -0b110
二、移位运算
移位运算包含左移位和右移位。
1、左移位运算
左移位运算使用符号<<
表示。将二进制数整体向左移动指定的位数。
格式如下:
0bxx<<n
说明:0bxx表示一个二进制数,n表示将该二进制数向左移动n位。
左移位运算用于增大数值,向左移动 1 位,则二进制数的值变为原来的 2 倍,向左移动 2 位,则则二进制数的值变为原来的 4 倍,以此类推。
例如:
a=0b1101 #十进制数13
b=5 #二进制为:101
print(a<<2,bin(a<<2)) #a变为原来的4倍
print(b<<1,bin(b<<1)) #b变为原来的2倍
运算结果为:
52 0b110100
10 0b1010
2、右移位运算
右移位运算使用符号>>
表示。将二进制数整体向右移动指定的位数。
格式如下:
0bxx>>n
说明:0bxx表示一个二进制数,n表示将该二进制数向右移动n位。
右移位运算用于减小数值,向右移动 1 位,则二进制数的值变为原来的二分之一(取整),向右移动 2 位,则则二进制数的值变为原来的四分之一(取整),以此类推。
例如:
a=0b1101 #十进制数13
b=5 #二进制为:101
print(a>>2,bin(a>>2)) #a变为0011
print(b>>1,bin(b>>1)) #b变为010
运算结果为:
3 0b11
2 0b10