php对两个字符串执行异或(^)运算时,会逐字符对其ascii码值进行按位异或,结果再转换为对应ascii字符;`"!" ^ "@"` 得到 `"a"`,正是因为 ascii 33 与 64 异或后等于 97,即字符 `'a'` 的编码。
在 PHP 中,当 ^(异或)运算符的两个操作数均为字符串时,PHP 不会将其视为布尔或整型逻辑运算,而是按字符进行逐位 ASCII 码异或,并将结果重新组合为新字符串。这一行为由 PHP 官方文档明确定义:若 &、|、^ 的操作数均为字符串,则运算作用于各字符的 ASCII 值,最终返回字符串结果。
以示例代码为例:
$var = "!" ^ "@"; echo $var; // 输出:a
其底层计算过程如下:
00100001 ← '!' (33) ^ 01000000 ← '@' (64) ────────── 01100001 ← 结果:97(十进制)
01100001 对应十进制 97,恰好是小写字母 'a' 的 ASCII 码。因此 $var 的值为字符串 "a"。
⚠️ 注意事项:
总结:理解 PHP 字符串位运算的关键,在于牢记「字符串异或 = 逐字节 ASCII 异或 → 转回字符」。掌握 ASCII 码对照与二进制运算,即可准确预测此类表达式的结果。