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

为何PHP与C#代码执行同一位运算后输出值不同?

为什么PHP和C#的位运算结果不一样?

嗨,这个问题我之前也踩过坑!核心原因就是俩语言对整数的「存储容量」和「溢出时的处理逻辑」完全不同,具体拆解成两点就清楚了:

1. 整数的“肚子大小”不一样

  • C#里的int是个小肚量的32位有符号整数,它最多只能存 -2147483648 到 2147483647 之间的数。
  • 而PHP在现在绝大多数系统里,int是大肚量的64位有符号整数,能存的范围超级大:从 -9223372036854775808 到 9223372036854775807。

咱们先算下原数左移10位的准确值:395390486 × 1024 = 404879857664。这个数远超过C# int的最大容量,但对PHP的64位int来说完全装得下——这就是PHP能直接输出准确值的原因。

2. 装不下时的“应急处理”不一样

当C#的32位int碰到装不下的数时,会直接截断处理:只保留结果的低32位二进制位,然后按32位有符号整数的规则解读这个截断后的值。

咱们验证一下:把404879857664除以4294967296(也就是2的32次方)取余数,得到的结果正好是1152931840——这就是C#输出的数值啦。而且C#默认不会因为这个溢出报错,直接返回截断后的结果。

额外说明:运算顺序没问题哦

你可能会担心是不是运算优先级搞反了,但其实两种语言里,10 & 0xFF的优先级都比移位赋值(<<=)高,所以都会先算出10 & 0xFF = 10,再执行左移10位的操作——这部分逻辑是完全一致的,不是差异的源头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:38:52