我遇到的问题是我需要做一个<<在32位机器上,这个数字已经相当大了。如果我转移这个大数字,答案是不正确的,我能以任何方式解决这个问题吗?
我很确定笔记本电脑运行Windows7 64位但PHP_INT_MAX生成2147483647.有没有办法设置php使用64位?我在这台笔记本电脑上运行XAMPP服务器而且我必须对数字进行一些转移,如果数字移动太多次我得到错误答案。
提前致谢。 千斤顶
答案 0 :(得分:1)
整数的大小取决于平台,尽管最大值约为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));
}