php按位返回错误结果

php按位返回错误结果,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));

当我使用变量时,我对两个变量的按位操作有问题,比如下面的变量返回正确的结果,对于“lock”=1,open=0

$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返回字符串