我刚刚意识到有用的东西并希望分享:
我在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);
任何人都有更多的贡献?
答案 0 :(得分:1)
看看gmp。它允许对大数字进行逐位运算。
$role = gmp_init("0xffffffff");
$function_ACL = gmp_init("0x80000000");
if (gmp_and($role, $function_ACL))
echo "yes!";