PHP 32位上的左位移位问题

时间:2013-01-03 03:50:19

标签: php bit-shift

我遇到的问题是我需要做一个<<在32位机器上,这个数字已经相当大了。如果我转移这个大数字,答案是不正确的,我能以任何方式解决这个问题吗?

我很确定笔记本电脑运行Windows7 64位但PHP_INT_MAX生成2147483647.有没有办法设置php使用64位?我在这台笔记本电脑上运行XAMPP服务器而且我必须对数字进行一些转移,如果数字移动太多次我得到错误答案。

提前致谢。 千斤顶

2 个答案:

答案 0 :(得分:1)

From the reference

  

整数的大小取决于平台,尽管最大值约为20亿是通常的值(32位有符号)。 64位平台的最大值通常约为9E18。 PHP不支持无符号整数。整数大小可以使用常量PHP_INT_SIZE来确定,最大值可以使用自PHP 4.4.0和PHP 5.0.5以来的常量PHP_INT_MAX来确定。

所以不,你不能将它设置为使用64位。

似乎GMP functions可能就是您所需要的。有人在this page上发布了一个提示,要求他们按位进行按位移位:

  

此外,对于那些希望进行按位移位的人来说,这很简单..向左移动,只需将数字乘以pow(2,x),然后向右移动,除以pow(2,x)。

<?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))); 
} 
?> 

答案 1 :(得分:0)

function logical_right_shift( $val , $shft ) {
    return floor(($val / pow(2,$shft)));
}

function logical_left_shift( $val , $shft ) {
    return ($val * pow(2,$shft));
}