我有这段代码:
<?php
$integer = 33963677451;
$integer &= 0xFFFFFFFF;
echo $integer;
?>
但是,当我执行它时,输出是
-396060917
Python中的相同功能
if __name__ == '__main__':
integer = 33963677451
integer &= 0xFFFFFFFF
print integer
输出
3898906379
似乎PHP无法存储大变量。你们有没有想过如何在Python中使用PHP获得相同的结果?
谢谢!
答案 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位的整数转换为浮点数。您似乎无法对浮动执行此操作。