一、位运算符:基于二进制的高效运算
位运算符针对整数的二进制位进行操作,返回结果仍为整数,是底层编程和性能优化的重要工具。
1. 位与运算符(&)
- 运算规则:相同二进制位中,只要有一个为 0 则结果为 0,否则为 1(一假则假)。
- 典型应用:
- 奇偶判断:任何数与 1 做位与,结果为 1 则为奇数,否则为偶数。
- 范围限定:通过掩码(如
0xff)将数字限制在特定范围(0 ~ 2 的幂次方 - 1)。
num = 294865187561251 mask = 0xff # 二进制11111111,限定范围0~255 print(num & mask) # 输出num的低8位二进制对应的十进制数
2. 位或运算符(|)
- 运算规则:相同二进制位中,只要有一个为 1 则结果为 1,否则为 0(一真则真)。
- 典型应用:权限合并。
# 定义文件权限(二进制位从低位到高位代表不同权限) R = 4 # 读权限(0100) W = 2 # 写权限(0010) X = 1 # 可执行权限(0001) # 赋予读写权限 file_perm = R | W # 二进制0110,对应十进制6 # 验证是否拥有写权限 print(file_perm & W == W) # 输出True
3. 异或运算符(^)
- 运算规则:相同二进制位为 0,不同为 1。
- 典型应用:
- 加解密:通过异或运算实现简单加密,加密和解密使用同一密钥。
- 数字交换:不借助临时变量交换两个数。
- 找丢失数据:在成对数据中快速定位唯一缺失值(利用
a^a=0和0^b=b)。
# 加密与解密示例 message = "呵啦哦啊额嗯" key = 2000 # 加密 encrypted = "" for char in message: encrypted += chr(ord(char) ^ key) print(encrypted) # 输出加密后的乱码 # 解密(使用相同密钥) decrypted = "" for char in encrypted: decrypted += chr(ord(char) ^ key) print(decrypted) # 还原为原始字符串
4. 位非运算符(~)
- 运算规则:按位取反(0 变 1,1 变 0)。
5. 位移运算符(<<,>>)
- 左移运算符(<<):二进制位左移,低位补 0,左移 n 位等价于乘以 2^n。
- 右移运算符(>>):二进制位右移,正数高位补 0,负数补 1,右移 n 位等价于除以 2^n(向下取整)。
- 典型应用:快速计算倍数或半数(如
a << 1等价于a*2,a >> 1等价于a//2)。
二、赋值运算符:简化变量操作
- 基础赋值:
=(优先级最低,是语句而非表达式)。 - 复合赋值:
+=, -=, *=, /=, //=, %=, **=, &=, ^=, |=, <<=, >>=。
三、关系运算符:数据比较的核心工具
- 包括
==, !=, >, <, >=, <=,返回布尔值(True或False),常用于条件判断和循环控制。
四、逻辑运算符:组合条件表达式
- and(逻辑与):一假即假,存在短路现象(若第一个表达式为 False,第二个不计算)。
- or(逻辑或):一真即真,存在短路现象(若第一个表达式为 True,第二个不计算)。
- not(逻辑非):取反,结果必为布尔值。
五、特殊运算符:海象与三元运算符
- 海象运算符(:=):允许在表达式中赋值,提升代码简洁性(如
if (n := len(list)) > 0:)。 - 三元运算符:
exp1 if condition else exp2,根据条件选择执行分支,等价于简化的if-else语句。
六、实战案例:IP 地址与签到状态的位运算应用
-
IP 地址转换:将整数转换为点分十进制 IP。
num = 2489619481 ipv4 = num & 0xff ipv3 = num >> 8 & 0xff ipv2 = num >> 16 & 0xff ipv1 = num >> 24 & 0xff print(f"{ipv1}.{ipv2}.{ipv3}.{ipv4}") # 输出类似"147.128.32.1"的IP -
签到状态判断:用一个整数表示 31 天的签到情况,判断某天是否签到。

总结:运算符的应用场景与优先级
- 性能优化:位运算(如位移)比乘除法更高效,适合底层算法。
- 权限系统:位或(|)和位与(&)是设计权限标志的核心。
- 条件控制:关系运算符与逻辑运算符结合,构建复杂判断逻辑。
- 代码简洁性:海象运算符和三元运算符可减少冗余代码。
1812






