2026/3/27 14:30:46
网站建设
项目流程
沙朗做网站公司,北京网站优化步骤,wordpress 企业版,网站建设工作流程一、位运算基础概念
位运算直接对二进制位#xff08;bit#xff09;进行操作#xff0c;运算速度远超加减乘除等算术运算。Python中的整数以二进制补码形式存储#xff0c;所有位运算都基于补码完成。
二、按位运算符详解
1. 按位与 ()
原理#xff1a;两个对应位都…一、位运算基础概念位运算直接对二进制位bit进行操作运算速度远超加减乘除等算术运算。Python中的整数以二进制补码形式存储所有位运算都基于补码完成。二、按位运算符详解1. 按位与 ()原理两个对应位都为1时结果为1否则为0。语法a b示例6的二进制是01103的二进制是0011print(63)# 输出 2二进制结果为0010典型应用快速判断奇偶x 1若结果为1则是奇数为0则是偶数提取二进制特定位num 0b1000提取第4位的值2.按位或 (|)原理只要有一个对应位为1结果就为1。语法a | b示例# 6的二进制是01103的二进制是0011print(6|3)# 输出7二进制结果为0111典型应用批量设置二进制位flags | 0b100开启第三位标志位权限合并将多个权限掩码合并为单一权限值3. 按位异或 (^)原理对应位相异时结果为1相同时结果为0。语法a ^ b示例# 6的二进制是01103的二进制是0011print(6^3)# 输出5二进制结果为0101典型应用变量交换无需临时变量a, b a^b, b^a快速定位不同对比两个二进制数据的差异位简单加密使用同一个密钥对数据进行加解密4.按位取反 (~)原理对每个位取反0变11变0。由于Python使用无限精度补码结果表现为~x -x-1语法~a示例print(~3)# 输出-4# 3--011# 4--100典型应用生成掩码~0可以生成全1的二进制序列快速获取负数表示~x 1等价于 -x5.左移 ()原理将二进制位向左移动n位右边补0相当于乘以2的n次方。语法a n示例print(52)# 5的二进制是101左移2位后变为10100输出20典型应用快速乘法x 1 等价于x*2快速计算2的幂次1 n6.右移 ()原理将二进制位向右移动n位正数左边补0负数左边补1。相当于除以2的n次方并向下取整。语法a n示例print(202)# 20的二进制是10100右移2位后变为101输出5print(-202)# 输出-5典型应用快速除法x 1 等价于x//2取绝对值优化对于负数 (x ^ (x 31)) - (x 31)三、高级应用技巧1、位掩码操作# 定义权限掩码PERM_READ0b0001PERM_WRITE0b0010PERM_EXECUTE0b0100# 分配权限user_permPERM_READ|PERM_WRITE# 检查权限has_write(user_permPERM_WRITE)!02、快速计算奇偶与倍数# 判断是否是2的幂defis_power_of_two(x):returnx(x-1)0#这个函数的核心逻辑建立在2的幂的二进制特性之上# 2的幂的二进制特征所有2的幂在二进制表示中都只有最高位是1其余位都是0。# 2^0 1 → 二进制0001# 2^1 2 → 二进制0010# 2^2 4 → 二进制0100# 2^3 8 → 二进制1000# x-1的魔法翻转当你对2的幂减1时会把唯一的1变成0并将它右边所有的0全部变成1。# 8 (1000) -1 7 (0111)# 4 (0100) -1 3 (0011)# 位与运算消去1将x和x-1进行位与运算时两个数没有任何一位同时为1所以结果必然是0。# 1000 0111 0000# 0100 0011 0000#这个实现有一个需要注意的点当x0时0 (-1) 会等于0但0并不是2的幂。在实际应用中通常需要添加额外的判断条件defis_power_of_two(x):returnx0and(x(x-1))0# 计算两数平均值避免溢出defaverage(a,b):return(ab)13、IP地址转换# 将IPv4地址转换为整数#这个函数的本质是把点分十进制表示的IPv4地址转换为一个32位无符号整数利用位运算实现了最高效的合并。defip_to_int(ip):# ip.split(.) 将字符串格式的IP地址按点分割得到一个四元素字符串列表。比如输入 192.168.1.1会得到 [192,168,1,1]。# map(int, ...) 将这四个字符串转换为整数类型再用list()转为整数列表最终 parts [192,168,1,1]。partslist(map(int,ip.split(.)))# parts[0] 24将IP的第一段最高8位左移24位占据整数的最高8位。比如192 24 得到二进制中前8位为11000000后面24位全是0。# parts[1] 16第二段左移16位占据第二高的8位。# parts[2] 8第三段左移8位占据第三组8位。# parts[3]第四段不移动直接占据最后8位。# 四次左移操作后四段整数在二进制中各自占据独立的8位区域使用|按位或将它们合并成一个完整的32位整数。按位或的特性保证了不同段的二进制位不会互相干扰完美拼接四段8位数据。return(parts[0]24)|(parts[1]16)|(parts[2]8)|parts[3]位运算在Python标准库中的应用极其广泛比如bisect模块的二分查找、array模块的内存优化、以及加密算法中的位级操作深入掌握位运算能大幅提升你的代码执行效率与底层编程能力。