位运算是在二进制数的位级别上执行操作的一种运算。
1. &
(按位与)
如果两个相应的位都为1,则结果为1,否则为0。
5 & 3 = 1
# 5 的二进制表示是 101
# 3 的二进制表示是 011
# 按位与后得到 001,即 1
2. |
(按位或)
如果两个相应的位至少有一个为1,则结果为1,否则为0。
5 | 3 = 7
# 5 的二进制表示是 101,
#3 的二进制表示是 011,
#按位或后得到 111, 即 7
3. ~
(按位取反)
对数的每个位执行取反操作,即0变为1,1变为0。
~5 = -6
# 5 的二进制表示是 101,按位取反后得到 010,即 -6
print(~5)
#取反使用8位二进制数表示
#将 5 的二进制表示取反。
# 5 的二进制表示是 00000101,
# 取反后得到 11111010。 #-6
#6 的二进制表示为 00000110。
#取反: 对绝对值的二进制表示进行取反操作得到 11111001。
#加1: 将取反后的结果加1得到 11111010。
#取反(那得到的就是负数了) #8位的二进制.
#然后怎么知道是什么
#11111010 首先先-1
#11111001
#然后取反
#00000110 #6
#前面有负号,所以是-6
4. ^
(按位异或)
如果两个相应的位不相同,则结果为不同为1,否则为相同为0。
5 ^ 3 = 6
# 5 的二进制表示是 101
# 3 的二进制表示是 011
# 按位异或后得到 110,即 6
5. 同或(Not XOR)
与异或相反,如果两个相应的位相同,则结果为1,否则为0。
6.<<
(左移)
将一个数的所有位向左移动指定的位数。左移的话是不丢掉原本的数字的,最右补充0
5 << 1 = 10
# 5 的二进制表示是 101,
# 左移一位后得到 1010,即 10
7.>>
(右移)
将一个数的所有位向右移动指定的位数。右移要丢掉原本的最右侧数字,最左补零(默认)不用管
5 >> 1 = 2
# 5 的二进制表示是 101
# 右移一位后得到 10,即 2