PHP var变为负数

时间:2011-02-17 14:26:56

标签: php python integer

我有这段代码:

<?php
$integer = 33963677451;
$integer &= 0xFFFFFFFF;
echo $integer;
?>

但是,当我执行它时,输出是

-396060917

Python中的相同功能

if __name__ == '__main__':
    integer = 33963677451
    integer &= 0xFFFFFFFF
    print integer

输出

3898906379

似乎PHP无法存储大变量。你们有没有想过如何在Python中使用PHP获得相同的结果?

谢谢!

6 个答案:

答案 0 :(得分:4)

对于整数,该值太大,python将其动态转换为long变量。 INT_MAX定义整数在切换为double之前可以有多大。如果你想在没有怪癖的情况下操纵大数,请使用GMPLIB多精度算术库。

答案 1 :(得分:1)

您的33,963,677,451高于签名的32位整数支持(最大2,147,483,647)。 64位PHP版本支持更高的值。

答案 2 :(得分:0)

php只支持有符号整数。你看到溢出

另外,python案例的答案应该是33963677451

答案 3 :(得分:0)

我不知道它是否只是一个拼写错误,但在使用每种语言执行AND操作时,您使用的是不同的值。 :)

PHP版本中有“0xFFFFFFFFFFF”(11个字符),而Python版本只有8个字符。

无论哪种方式,都应该是整数溢出。

答案 4 :(得分:0)

<?php
$integer = (float) 33963677451;
$integer &= 0xFFFFFFFFFFF;
echo $integer;

尝试确保$ integer的类型为float。

了解更多:http://www.php.net/manual/de/language.types.integer.php#language.types.integer.overflow

答案 5 :(得分:0)

如果您希望看到发生了什么,这是一个显示不同类型的printf语句。

$i1 = 33963677451;
$i2 = 0xFFFFFFFFFFF;
printf("%b (%d, %f) & \n%b (%d, %f)\n = \n%b (%d, %f)", 
        $i1, $i1, $i1, $i2, $i2, $i2, $i1&$i2, $i1&$i2, $i1&$i2);

PHP将大于32位的整数转换为浮点数。您似乎无法对浮动执行此操作。