Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
32位上的PHP左位移位问题_Php_Bit Shift - Fatal编程技术网

32位上的PHP左位移位问题

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)


整数的大小取决于平台,尽管通常的最大值约为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));
}