32位上的PHP左位移位问题
我遇到了一个问题,我需要做一个 整数的大小取决于平台,尽管通常的最大值约为20亿(即32位有符号)。64位平台的最大值通常约为9E18。PHP不支持无符号整数。整数大小可以使用常量PHP_INT_size确定,最大值可以使用自PHP 4.4.0和PHP 5.0.5以来的常量PHP_INT_MAX确定 因此,不能将其设置为使用64位 看起来这可能是你需要的。有人发布了一条关于使用它们进行按位移位的提示: 此外,对于那些希望进行逐位移位的人来说,这非常简单。。要向左移动,只需将数字乘以pow(2,x),要向右移动,则除以pow(2,x)32位上的PHP左位移位问题,php,bit-shift,Php,Bit Shift,我遇到了一个问题,我需要做一个 整数的大小取决于平台,尽管通常的最大值约为20亿(即32位有符号)。64位平台的最大值通常约为9E18。PHP不支持无符号整数。整数大小可以使用常量PHP_INT_size确定,最大值可以使用自PHP 4.4.0和PHP 5.0.5以来的常量PHP_INT_MAX确定 因此,不能将其设置为使用64位 看起来这可能是你需要的。有人发布了一条关于使用它们进行按位移位的提示: 此外,对于那些希望进行逐位移位的人来说,这非常简单。。要向左移动,只需将数字乘以pow(2,x
整数的大小取决于平台,尽管通常的最大值约为20亿(即32位有符号)。64位平台的最大值通常约为9E18。PHP不支持无符号整数。整数大小可以使用常量PHP_INT_size确定,最大值可以使用自PHP 4.4.0和PHP 5.0.5以来的常量PHP_INT_MAX确定
因此,不能将其设置为使用64位
看起来这可能是你需要的。有人发布了一条关于使用它们进行按位移位的提示:
此外,对于那些希望进行逐位移位的人来说,这非常简单。。要向左移动,只需将数字乘以pow(2,x),要向右移动,则除以pow(2,x)
你赢了我。我想说同样的话,展示一个代码示例。我不知道这对我有什么帮助?如果我被限制为32位,并调用:$bitString=$bitString,您将使用GMP数字,这是任意精度的,而不是php的固定大小的整数。您可以使用创建GMP编号。另外,正如@PleaseStand所建议的,你也可以使用bcmath来完成同样的事情,因为它还提供任意精度的数学。你比我强。我想说同样的话,展示一个代码示例。我不知道这对我有什么帮助?如果我被限制为32位,并调用:$bitString=$bitString,您将使用GMP数字,这是任意精度的,而不是php的固定大小的整数。您可以使用创建GMP编号。此外,正如@PleaseStand所建议的,您也可以使用bcmath来完成同样的事情,因为它还提供任意精度的数学。
<?php
function gmp_shiftl($x,$n) { // shift left
return(gmp_mul($x,gmp_pow(2,$n)));
}
function gmp_shiftr($x,$n) { // shift right
return(gmp_div($x,gmp_pow(2,$n)));
}
?>
function logical_right_shift( $val , $shft ) {
return floor(($val / pow(2,$shft)));
}
function logical_left_shift( $val , $shft ) {
return ($val * pow(2,$shft));
}