PHP位运算三大应用:一、奇偶判断用$n & 1==1,O(1)且可靠;二、交换变量用$a^=$b;$b^=$a;$a^=$b,无临时变量;三、位操作通过移位与掩码获取或设置第m位。

如果您在PHP开发中需要高效处理整数的二进制位操作,例如权限校验、状态压缩或底层性能优化,则必须掌握位运算的典型应用模式。以下是实现这些常用技巧的具体方法:
一、判断整数奇偶性
利用最低位是否为1来快速判定奇偶,避免取模运算开销,原理是所有奇数二进制末位恒为1,偶数为0。
1、使用按位与运算符&和常量1进行比较。
2、表达式($n & 1) == 1结果为true时,$n为奇数;结果为false时,$n为偶数。
立即学习“PHP免费学习笔记(深入)”;
3、该操作时间复杂度为O(1),且不依赖类型转换,比$n % 2 === 1更可靠。
二、交换两个整数变量值
无需额外临时变量即可完成数值互换,基于异或运算的自反性(a ^ a = 0,a ^ 0 = a)与结合律实现。
1、执行$a ^= $b;,此时$a存储的是$a ^ $b。
2、执行$b ^= $a;,即$b = $b ^ ($a ^ $b) = $a。
3、执行$a ^= $b;,即$a = ($a ^ $b) ^ $a = $b。
4、最终$a与$b完成交换,全程无类型转换风险,且不产生中间变量内存分配。
三、获取或设置指定二进制位
通过移位与掩码组合,精准定位从低位起第m位(位序从1开始计),适用于标志位读写场景。
1、获取第m位值:计算($n >> ($m - 1)) & 1,结果为0或1。
2、将第m位置1:使用$n | (1 ,确保目标位强制为1,其余位不变。
3、将第m位置0:使用$n & ~(1 ,先生成仅第m位为0的掩码再与原数相与。
4、注意1 必须保证$m为正整数且小于PHP整数位宽(通常64),否则结果为0或触发ValueError。
四、权限组合与校验
以2的幂作为独立权限标识,通过位或合并、位与检测,实现单字段多权限存储与判断。
1、定义权限常量:define('VIEW', 1); define('EDIT', 2); define('DELETE', 4); define('ADD', 8);
2、合并权限:用户拥有查看与编辑权限则赋值$perm = VIEW | EDIT;,结果为3。
3、校验权限:判断是否含删除权限,写if ($perm & DELETE) { /* 有权限 */ },非零即真,不可用逻辑and替代。
4、移除权限:如取消编辑权限,执行$perm &= ~EDIT;,等价于$perm = $perm & (~EDIT)。
五、整数乘除2的幂次
利用左移与右移直接实现乘除法,规避浮点误差与函数调用开销,适用于非负整数。
1、乘以2的m次方:写$n ,等效于<code>$n * pow(2, $m)但无浮点转换。
2、除以2的m次方并向下取整:写$n >> $m,对非负$n成立;若$n为负数,结果依赖符号扩展,不可直接用于数学除法语义。
3、确保$m为非负整数且$n >> 64。



















