PHP var 变为负值

发布于 2024-10-17 14:59:24 字数 472 浏览 4 评论 0原文

我有这段代码:

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

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

-396060917

The same function in Python

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

The output 是

3898906379

It似乎PHP不能存储大变量。你们知道如何在 PHP 中得到与 Python 中相同的结果吗?

谢谢 !

I have this code :

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

But, when I execute it, the output is

-396060917

The same function in Python

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

The output is

3898906379

It seems PHP can't store big variables. Do you guys have any idea how to get the same result in PHP I have in Python ?

Thanks !

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

请帮我爱他 2024-10-24 14:59:24

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

That value is too big for an integer, python dynamically casts that into a long variable. INT_MAX defines how big your integer can be before it switches over into a double. If you want to manipulate large numbers without quirks use GMPLIB a multiple precision arithmetic library.

倥絔 2024-10-24 14:59:24

您的 33,963,677,451 高于有符号 32 位整数支持的范围(最大 2,147,483,647)。 64 位 PHP 版本确实支持更高的值。

Your 33,963,677,451 is above what a signed 32bit integer supports (max 2,147,483,647). 64bit PHP versions do support higher values.

给不了的爱 2024-10-24 14:59:24

php 仅支持有符号整数。您也看到了溢出

,python 案例的答案应该是 33963677451

php only supports signed integers. You are seeing overflow

also, the answer for the python case should be 33963677451

痴情换悲伤 2024-10-24 14:59:24

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

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

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

I don't know if it's just a typo, but you are using different values when performing the AND operation in each language. :)

You have "0xFFFFFFFFFFF" (11 chars) in your PHP version, as opposed to only 8 in the Python version.

Either way, it should be integer overflow.

戏舞 2024-10-24 14:59:24
<?php
$integer = (float) 33963677451;
$integer &= 0xFFFFFFFFFFF;
echo $integer;

尝试确保 $integer 是 float 类型。

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

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

try making sure that $integer is of type float.

for more: http://www.php.net/manual/de/language.types.integer.php#language.types.integer.overflow

瀟灑尐姊 2024-10-24 14:59:24

如果您想了解发生了什么,这里有一个显示不同类型的 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 位的整数转换为浮点数。看来你不能对浮点数执行此操作。

If you wish to see whats happening, here is a printf statement showing the different types.

$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 casts integers larger than 32 bits to floats. It seems that you can not perform this operation on floats.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文