python基础day2

一、位运算符:基于二进制的高效运算

位运算符针对整数的二进制位进行操作,返回结果仍为整数,是底层编程和性能优化的重要工具。

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=00^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*2a >> 1等价于a//2)。
二、赋值运算符:简化变量操作
  • 基础赋值=(优先级最低,是语句而非表达式)。
  • 复合赋值+=, -=, *=, /=, //=, %=, **=, &=, ^=, |=, <<=, >>=
三、关系运算符:数据比较的核心工具
  • 包括==, !=, >, <, >=, <=,返回布尔值(TrueFalse),常用于条件判断和循环控制。
四、逻辑运算符:组合条件表达式
  • and(逻辑与):一假即假,存在短路现象(若第一个表达式为 False,第二个不计算)。
  • or(逻辑或):一真即真,存在短路现象(若第一个表达式为 True,第二个不计算)。
  • not(逻辑非):取反,结果必为布尔值。
五、特殊运算符:海象与三元运算符
  • 海象运算符(:=):允许在表达式中赋值,提升代码简洁性(如if (n := len(list)) > 0:)。
  • 三元运算符exp1 if condition else exp2,根据条件选择执行分支,等价于简化的if-else语句。
六、实战案例:IP 地址与签到状态的位运算应用
  1. 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
    
  2. 签到状态判断:用一个整数表示 31 天的签到情况,判断某天是否签到。

总结:运算符的应用场景与优先级
  • 性能优化:位运算(如位移)比乘除法更高效,适合底层算法。
  • 权限系统:位或(|)和位与(&)是设计权限标志的核心。
  • 条件控制:关系运算符与逻辑运算符结合,构建复杂判断逻辑。
  • 代码简洁性:海象运算符和三元运算符可减少冗余代码。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值