贝利信息

PHP中字符串异或运算的ASCII原理详解

日期:2026-01-23 00:00 / 作者:碧海醫心

php对两个字符串执行异或(^)运算时,会逐字符对其ascii码值进行按位异或,结果再转换为对应ascii字符;`"!" ^ "@"` 得到 `"a"`,正是因为 ascii 33 与 64 异或后等于 97,即字符 `'a'` 的编码。

在 PHP 中,当 ^(异或)运算符的两个操作数均为字符串时,PHP 不会将其视为布尔或整型逻辑运算,而是按字符进行逐位 ASCII 码异或,并将结果重新组合为新字符串。这一行为由 PHP 官方文档明确定义:若 &、|、^ 的操作数均为字符串,则运算作用于各字符的 ASCII 值,最终返回字符串结果。

以示例代码为例:

$var = "!" ^ "@";
echo $var; // 输出:a

其底层计算过程如下:

  0010

0001 ← '!' (33) ^ 01000000 ← '@' (64) ────────── 01100001 ← 结果:97(十进制)

01100001 对应十进制 97,恰好是小写字母 'a' 的 ASCII 码。因此 $var 的值为字符串 "a"。

⚠️ 注意事项:

总结:理解 PHP 字符串位运算的关键,在于牢记「字符串异或 = 逐字节 ASCII 异或 → 转回字符」。掌握 ASCII 码对照与二进制运算,即可准确预测此类表达式的结果。