php 按位与 return 错误结果
php Bitwise AND return false result
当我使用如下变量 return 正确结果时,我对两个变量的 AND 按位运算有问题,对于 "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));
现在我总是 return 1,回声中的 decbin return 相同的值但是当我使用 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 运算。
但这里的问题是,您正在 对方法 [ 的布尔输出 按位应用 AND =45=]。这意味着如果它们是正确的数字,您将始终得到 1。
这里的解决方案是,您应该在将字符串转换为 int 后应用:intval.
$STS 值不是数值
我在这里看到的第二个问题是在第一个示例中,这个变量的内容包含非数值:
$STS = "11000000001100000000"; //787200 open
有一些字符是不可见的,但是如果你用ASCII工具检查器检查你可以看到它:看看here and here并复制这个变量的值,你会看到包含非数字:
11000000001100000000U+202C
那么,is_numeric 方法返回 false,因为 没有将此字符串识别为数字 数字(不可见)值。这就是为什么在第一个例子中你得到 0 的原因。
当我使用如下变量 return 正确结果时,我对两个变量的 AND 按位运算有问题,对于 "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));
现在我总是 return 1,回声中的 decbin return 相同的值但是当我使用 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 运算。
但这里的问题是,您正在 对方法 [ 的布尔输出 按位应用 AND =45=]。这意味着如果它们是正确的数字,您将始终得到 1。
这里的解决方案是,您应该在将字符串转换为 int 后应用:intval.
$STS 值不是数值
我在这里看到的第二个问题是在第一个示例中,这个变量的内容包含非数值:
$STS = "11000000001100000000"; //787200 open
有一些字符是不可见的,但是如果你用ASCII工具检查器检查你可以看到它:看看here and here并复制这个变量的值,你会看到包含非数字:
11000000001100000000U+202C
那么,is_numeric 方法返回 false,因为 没有将此字符串识别为数字 数字(不可见)值。这就是为什么在第一个例子中你得到 0 的原因。