You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何PHP中使用按位非运算符~õ无法输出换行?

PHP Golf中echo ~õ;无法输出换行的原因解析

为什么该写法本该输出换行

这是早期PHP Golf里的字节优化技巧,核心依赖**单字节编码(如ISO-8859-1/Latin-1)**的字符处理逻辑:

  • 换行符\n的ASCII值为10
  • PHP的按位非运算符~遵循~x = -x -1的运算规则,要通过~x得到对应换行的10,反向推导可得x = -11。在8位无符号整数范围(0-255)内,-11对应的无符号值为245(256-11=245)
  • 在ISO-8859-1编码中,ASCII值245对应的字符就是õ。执行echo ~õ;时,PHP会先把õ转成整数245,按位非后得到-246;echo输出该整数时,会取其低8位无符号值-246 & 0xFF = 10,最终输出ASCII值10对应的换行符。

这种写法仅占8字节,比echo "\n";(10字节)、直接写换行的echo " ";(9字节)更短,完全符合PHP Golf追求最短代码的需求。

现在输出<J的原因

当前几乎所有开发环境默认使用UTF-8编码,而õ在UTF-8中是双字节字符(编码为0xC3 0xB5):

  • PHP处理该字符时,会将整个双字节序列解析为一个整数(十进制50101),而非单字节下的245
  • 执行~50101得到-50102,echo输出该整数时,对应的字符序列在UTF-8编码下被解析为<J,完全偏离了原本的换行符逻辑。

简言之,编码环境从单字节切换到UTF-8,是导致这个老技巧失效、输出异常的核心原因。

内容的提问来源于stack exchange,提问作者Mario

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 21:45:37