当我尝试这个
~1099511627520
在 32bit OS 上,结果是否定的,但是 64bit 是可以的~ 那么如何让它在 32bit OS 上工作呢?</p>
任何人都可以帮助我吗?谢谢~
当我尝试这个
~1099511627520
在 32bit OS 上,结果是否定的,但是 64bit 是可以的~ 那么如何让它在 32bit OS 上工作呢?</p>
任何人都可以帮助我吗?谢谢~
使用 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