如何在使用32位系统对数字(1099511627250)进行逆变运算时获得正确的结果


How to get the right result when inverse a number(1099511627520) using 32bit system

当我尝试这个时

~1099511627520

在32位操作系统上,结果为负数但是64位是可以的~那么如何让它在32位操作系统上工作呢

有人能帮我吗?感谢~

使用BC数学函数,您可以在32位机器上获得64位数字的逐位负数,如:

<?php
define('MAX_UINT_64', '18446744073709551615');
$number_64bit = '1099511627520';
$negate_64bit = bcsub(MAX_UINT_64, $number_64bit, 0);
var_dump($negate_64bit);
?>

它输出:

18446742974197924095

您可以尝试使用bcmath函数。

function neg($number)
    {
    return bcsub(0, bcadd($number, 1));
    }
echo neg('1099511627520') . PHP_EOL; // -1099511627521
echo ~1099511627520 . PHP_EOL; // -1099511627521
echo neg('1') . PHP_EOL; // -2
echo ~1 . PHP_EOL; // -2
echo neg('-1099511627520') . PHP_EOL; // 1099511627519
echo ~-1099511627520 . PHP_EOL; // 1099511627519
echo neg('-1') . PHP_EOL; // 0
echo ~-1 . PHP_EOL; // 0