php按位返回错误结果
当我使用变量时,我对两个变量的按位操作有问题,比如下面的变量返回正确的结果,对于“lock”=1,open=0php按位返回错误结果,php,bitwise-operators,bitwise-and,Php,Bitwise Operators,Bitwise And,当我使用变量时,我对两个变量的按位操作有问题,比如下面的变量返回正确的结果,对于“lock”=1,open=0 $ACRel = "00000000000000000000010000000000"; // $STS = "11000000011100000000"; //788224 locked $STS = "11000000001100000000"; //787200 open echo (is_numeric($STS)&is_numeric($ACRel));
$ACRel = "00000000000000000000010000000000";
// $STS = "11000000011100000000"; //788224 locked
$STS = "11000000001100000000"; //787200 open
echo (is_numeric($STS)&is_numeric($ACRel)); // return 1 or 0
我收到了十进制的$STS变量,我使用decbin()函数转换:
$ACRel = "00000000000000000000010000000000";
// $sts = decbin(788224);
$sts = decbin(787200); // return 11000000001100000000
echo (is_numeric($sts)&is_numeric($ACRel));
现在我总是返回1,echo中的decbin返回相同的值,但当我使用var_dump时,我有:
$sts = "11000000001100000000";
/home/vagrant/code/project/pro/calc.php:8:string '11000000001100000000' (length=26)
$sts = decbin(788224);
/home/vagrant/code/project/pro/calc.php:12:string '11000000001100000000' (length=20)
为什么长度不同,字符串看起来一样?也许这就是答案?但是我不知道为什么。与您描述的问题相关,我在这里看到两个问题 按位应用 我看到的第一个问题是,在所描述的值变量上应用AND的运算 但是这里的问题是,在方法的布尔输出上按位应用AND。这意味着,如果它们是正确的数字,您将始终得到1 这里的解决方案是,您应该在将字符串转换为int:intval后应用 $STS值不包含数值 我在这里看到的第二个问题是在第一个公开的示例中,该变量的内容包含非数值:
$STS = "11000000001100000000"; //787200 open
有些字符是不可见的,但如果使用ASCII工具检查器检查,您可以看到它:查看并复制此变量的值,您将看到其中包含非数字:
11000000001100000000U+202C
因此,方法is_numeric返回false,因为它没有将该字符串识别为非数值(不可见)值的数值。这就是为什么在第一个示例中得到0的原因。decbin返回一个二进制变量,而$sts=”“返回一个字符串变量。它们是两种不同类型的变量,尽管var_dump返回字符串