位运算符
位运算符是在二进制层面进行操作的运算符,能够直接对整数的二进制表示进行处理。Python 中的位运算符包括以下几种,每一种都可以帮助我们在特定的场景下更高效地处理数据。
1. 按位与(&
)
按位与运算符 &
对两个整数的二进制位进行比较,只有对应的两个二进制位都是 1
时,结果位才为 1
,否则为 0
。
例子:
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
c = a & b # 12 = 0000 1100
print(c) # 输出 12
解释:
0011 1100
(60)0000 1101
(13)0000 1100
(12)
2. 按位或(|
)
按位或运算符 |
对两个整数的二进制位进行比较,只要对应的两个二进制位有一个是 1
,结果位就为 1
。
例子:
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
c = a | b # 61 = 0011 1101
print(c) # 输出 61
解释:
0011 1100
(60)0000 1101
(13)0011 1101
(61)
3. 按位异或(^
)
按位异或运算符 ^
对两个整数的二进制位进行比较,当对应的两个二进制位不同时,结果位为 1
,相同时为 0
。
例子:
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
c = a ^ b # 49 = 0011 0001
print(c) # 输出 49
解释:
0011 1100
(60)0000 1101
(13)0011 0001
(49)
4. 按位取反(~
)
按位取反运算符 ~
对一个数的二进制表示逐位取反,即将所有 0
变为 1
,将所有 1
变为 0
。这个运算对正数和负数的影响不同。
对于正数:
取反后结果为负数,并且是该数加1取反后的补码。
a = 60 # 60 = 0011 1100
c = ~a # -61 = 1100 0011
print(c) # 输出 -61
解释:
0011 1100
取反变成1100 0011
,这个是-61
的补码表示。
对于负数:
取反后结果为正数,并且是该数的绝对值减1。
例子:
a = -60
c = ~a
print(c) # 输出 59
解释:
-60
的补码是1100 0100
,取反得到0011 1011
,即59
。
5. 左移(<<
)
左移运算符 <<
将数字的二进制位向左移动指定的位数,右侧用 0
补齐。相当于乘以 2
的若干次方。
例子:
a = 60 # 60 = 0011 1100
c = a << 2 # 240 = 1111 0000
print(c) # 输出 240
解释:
0011 1100
左移两位变成1111 0000
。
6. 右移(>>
)
右移运算符 >>
将数字的二进制位向右移动指定的位数,左侧用 0
或 1
补齐,具体看该数的符号。
例子:
a = 60 # 60 = 0011 1100
c = a >> 2 # 15 = 0000 1111
print(c) # 输出 15
解释:
0011 1100
右移两位变成0000 1111
。
总结
位运算符可以在底层直接操作整数的二进制表示,适合处理需要高效计算或低级别操作的任务。按位取反运算符 ~
特别需要注意,它对正数和负数的处理是基于计算机的二进制补码表示的。理解和正确使用这些运算符,可以在优化和处理复杂的位级操作时提供巨大的帮助。
License:
CC BY 4.0