在PHP中将两个整数转换为长整数


Converting two integers into a long in PHP

我有两个整数,我需要把它们转换成一个长。我完全不知道该怎么做。我需要转换的两个整数是:

INT 1: 60850985 
INT 2: 59150141

我需要一个方法将两个整数转换成一个长整数。如果你能发一个,那就太好了。

当我说转换为long时,我想知道如何在PHP中从java中执行等效的(long)


让我在这里完全清楚:我从客户端接收两个int型,然后我需要将它们转换为long型,然后将单个long型再次用作单个int型。

本质上,我需要取两个int型并将它们转换成一个int型。在java中如何做到这一点的一个例子是:

  long $intA = (long) readInt();
  long $intB = (long) readInt();
  return ($intA << 32) + $intB;

PHP将数字存储为整数或浮点数,其中整数的大小取决于平台(但通常为32位,带符号)。如果你需要表示一个更大的数字,你应该使用BC Math函数。

使用BCM将两个数字相加如下:

$a = '60850985';
$b = '59150141';
echo bcadd($a, $b);

或乘法:

$a = '60850985';
$b = '59150141';
echo bcmul($a, $b);
编辑:

如果你想得到,它应该如何看起来作为一个64位的整数在1补码(如果有溢出),那么你必须做一些手动转换,以强制转换-2^63 .. 2^63-1范围内的值:

对于非负值,您可以首先将其转换为0 .. 2^64-1:

$long = bcmod($value, bcpow('2','64'));

如果它大于2^63-1,则减去2^63,然后从-2^63中减去这个值。

对于负值,首先添加2^64,直到值为正,然后执行上述步骤。

但是,只有当您想要检查字符串数是否存在溢出时,才需要上述步骤。通常您不需要这样做,甚至可能您甚至不需要使用BCM,因为您的数字很容易适合PHP的带符号32位整数数据类型(不需要强制转换,转换是自动的):

$a = '123'; // $a is a string
echo $a + 1; // will write 124, $a gets converted into int

如果你想的话,你可以强制转换:

$a = $a+0;

$a = (int)$a;
编辑2:

您仍然可以使用BCM函数进行计算:

$long = bcadd($low, bcmul($high, bcpow('2','32'))) 
// this essentially means:
// $long = $low + $high * 2^32
// which is
// $long = $low + $high << 32

然后,如果结果大于2^63-1,您可以执行一些额外的BCM计算,如上所述将无符号整数转换为有符号整数。

我使用常规加法:

$int1 = 60850985;
$int2 = 59150141;
$result = $int1 + $int2;//120001126

下面是PHP手册中的一段话:

整数的大小与平台有关,但有最大值大约20亿是通常的值(32位带符号)。64位平台的最大值通常约为9E18。PHP是不支持无符号整数。整数大小可以使用PHP_INT_SIZE常量,以及使用该常量的最大值PHP_INT_MAX自PHP 4.4.0和PHP 5.0.5。

如果你想处理大量的数字,请使用GMP (http://www.php.net/manual/en/book.gmp.php)或BCMath (http://www.php.net/manual/en/book.bc.php)。

要详细说明agentriddrum所说的内容,在PHP中不需要将整型转换为长型。PHP是一种动态语言,这意味着一般来说,对于基本类型的操作,不需要强制类型转换(除非是为了某些明确的目的——例如,将浮点数转换为整数),因为PHP会为您处理它。