PHP中大整数的按位运算的最大限制是多少?

时间:2014-02-27 04:45:27

标签: php bit-manipulation

我刚刚意识到有用的东西并希望分享:

我在64位Windows 7计算机上运行PHP x86。我试图建立一个权限系统,我有这样的一行:

// value of $role came from database i.e. 0xffffffff
// value of $function_ACL is hardcoded in PHP file using 32bit hex notation i.e. 0x80000000
// true if access is allowed
return ($function_ACL & $role) != 0

不知何故,使用intval()的规则转换$role的值,从而达到整数限制,结果错误0

为了解决这个问题,我注意到我们可以做到这一点

$function_ACL += 0;
$role += 0;
return ($function_ACL & $role) != 0 // works! which is odd, because type conversion don't follow the same routine

这让我想知道究竟是什么限制,然后尝试了几个非常大的数字

// these numbers get converted to scientific notation
echo 0xffffffffffffffffffffffffffffffff;
echo 9999999999999999999999999999999999

// 52 bits (13 f's) is the max limit for a correct bitwise operation
echo (0xfffffffffffff & 0x0000000000001);

任何人都有更多的贡献?

1 个答案:

答案 0 :(得分:1)

看看gmp。它允许对大数字进行逐位运算。

$role = gmp_init("0xffffffff");
$function_ACL = gmp_init("0x80000000");
if (gmp_and($role, $function_ACL))
    echo "yes!";