相关疑难解决方法(0)

强制PHP整数溢出

我们有一些整数算术,由于历史原因,它必须在PHP上使用与在一些静态类型语言中相同的算法.自从我们上次升级PHP以来,溢出整数的行为已经改变.基本上我们使用以下公式:

function f($x1, $x2, $x3, $x4)
{
   return (($x1 + $x2) ^ $x3) + $x4;
}
Run Code Online (Sandbox Code Playgroud)

但是,即使有转换:

function f($x1, $x2, $x3, $x4)
{
   return intval(intval(intval($x1 + $x2) ^ $x3) + $x4);
}
Run Code Online (Sandbox Code Playgroud)

我仍然以完全错误的数字结束......

例如,使用$ x1 = -1580033017,$ x2 = -2072974554,$ x3 = -1170476976)和$ x4 = -1007518822,我最终得到PHP中的-30512150和C#中的1617621783.

只是加在一起$ x1和$ x2我无法得到正确的答案:

在C#我得到

(-1580033017 + -2072974554) = 641959725
Run Code Online (Sandbox Code Playgroud)

在PHP中:

intval(intval(-1580033017) + intval(-2072974554)) = -2147483648
Run Code Online (Sandbox Code Playgroud)

这与:

intval(-1580033017 + -2072974554) = -2147483648
Run Code Online (Sandbox Code Playgroud)

我不介意写一个"IntegerOverflowAdd"函数或其他东西,但我不太清楚如何(-1580033017 + -2072974554)等于641959725.(我确实认为它是-2147483648 +(2*2 ^ 31) ,但是-2147483648 + 2 ^ 31是-1505523923,它大于Int.Min那你为什么要加2*2 ^ 31而不是2 …

php c# integer-overflow

8
推荐指数
2
解决办法
7871
查看次数

标签 统计

c# ×1

integer-overflow ×1

php ×1