【发布时间】:2022-12-13 22:05:32
【问题描述】:
我正在尝试用 PHP 对两个 32 位长的十六进制值进行 php 乘法,它似乎搞乱了这个计算,如果我将它乘以十进制值,也会发生同样的情况。
计算如例: 0xB5365D09 * 0xDEBC252C
在使用 hexdec 之前转换为十进制不会改变任何东西。
预期结果应为 0x9DAA52EA21664A8C 但 PHP 的结果为 0x9DAA52EA21664800
例子:
<?php
$res = 0xB5365D09 * 0xDEBC252C;
echo dechex(intval($res));
?>
我在这里做错了什么?
PHP8.2 在 debian,64 位 AMD 上运行。
【问题讨论】:
-
您没有显示任何代码。没有代码,我们无法判断您做错了什么。
-
代码就是它应该的样子:$res = 0xAA * 0xBB;
-
请在您的问题中添加Minimal, Reproducible Example。
-
0x9DAA52EA21664A8C是十进制的11360984175531674252,9223372036854775807是当前的PHP_INT_MAX。你可以试试bcmul或类似的 -
@C.E.,我不代表 PHP 核心团队发言,但我相信一般的想法是大多数人都知道他们是否在处理大数字并且希望意识到溢出(我认为它遵循 C 的规则),而且这也是一个相对较小的群体,因此在各处添加溢出检查被认为是矫枉过正。有一个 attempt at adding arbitrarily-sized integers 到 PHP,但停滞了。
标签: php hex multiplication calculation