我有两个整数,我需要将它们转换为长整数。我完全迷失了如何做到这一点。我需要转换的两个整数是:
INT 1: 60850985
INT 2: 59150141
我需要一个将两个整数转换为long的方法。如果你可以张贴一个,那就太好了。
当我说转换为很长时间时,我想知道如何在PHP中用java来完成等效的(长)
让我在这里完全清楚: 我从客户端收到两个int,然后我需要将它们转换为long,然后单个long再次用作单个int。
本质上,我需要采取两个整数并将它们转换为单个int。在java中完成此操作的示例如下:
long $intA = (long) readInt();
long $intB = (long) readInt();
return ($intA << 32) + $intB;
答案 0 :(得分:3)
PHP将数字存储为整数或浮点数,其中整数的大小取决于平台(但通常为32位,有符号)。如果您需要代表更大的数字,则应使用BC Math函数。
使用BCM添加两个数字就像:
$a = '60850985';
$b = '59150141';
echo bcadd($a, $b);
或乘以:
$a = '60850985';
$b = '59150141';
echo bcmul($a, $b);
编辑:
如果你想得到它,它应该看起来像1-complement中的64位有符号整数(如果有溢出),那么你必须做一些手动转换来将值转换为{{1}范围:
对于非负值,您可以先将其强制转换为-2^63 .. 2^63-1
:
0 .. 2^64-1
然后,如果它大于$long = bcmod($value, bcpow('2','64'));
,则从中减去2^63-1
,然后从2^63
中减去此值。
对于负值,首先添加-2^63
,直到值为正,然后执行上述步骤。
但是,只有在想要查看溢出时字符串编号的外观时才需要执行上述步骤。通常你不需要这个,可能你甚至不需要使用BCM,因为你的数字很容易适合PHP的带符号的32位整数数据类型(不需要转换,转换是自动的):
2^64
如果您愿意,可以强行转换:
$a = '123'; // $a is a string
echo $a + 1; // will write 124, $a gets converted into int
或
$a = $a+0;
编辑2:
您仍然可以使用BCM函数进行数学运算:
$a = (int)$a;
然后,如果结果大于$long = bcadd($low, bcmul($high, bcpow('2','32')))
// this essentially means:
// $long = $low + $high * 2^32
// which is
// $long = $low + $high << 32
,您可以执行一些额外的BCM计算,如上所述将无符号整数转换为有符号整数。
答案 1 :(得分:2)
我经常使用:
$int1 = 60850985;
$int2 = 59150141;
$result = $int1 + $int2;//120001126
以下是PHP手册的引用:
整数的大小取决于平台,尽管是最大值 大约20亿是通常的值(32位签名)。 64位平台的最大值通常约为9E18。 PHP确实如此 不支持无符号整数。可以使用确定整数大小 常量PHP_INT_SIZE,使用常量的最大值 自PHP 4.4.0和PHP 5.0.5以来的PHP_INT_MAX。
如果您想处理大数字,请使用GMP(http://www.php.net/manual/en/book.gmp.php)或BCMath(http://www.php.net/manual/en/book.bc.php)。
要详细说明AgentConundrum所说的内容,不需要在PHP中将整数转换为long。 PHP是一种动态语言,这意味着通常,对于基本类型的操作,不需要进行转换(除非它是出于某些明确的目的 - 即浮点数为整数),因为PHP会为您处理它。