使用32位系统反转数字(1099511627520)时如何获得正确的结果

时间:2013-02-21 07:17:32

标签: php computer-science

当我尝试这个时

~1099511627520

在32位操作系统上,结果是否定的 但是64位还可以〜 那么如何让它在32位操作系统上运行呢?

谁能帮帮我?  感谢〜

2 个答案:

答案 0 :(得分:3)

使用BC Math函数,你可以在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

答案 1 :(得分:0)

您可以尝试使用bcmath functions

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