按位运算符PHP

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了按位运算符PHP相关的知识,希望对你有一定的参考价值。

我有ASCII字符串"FFFFDFFF",表示十六进制值。我希望将该值放入二进制变量中,每个位都为10。下面是我的第一次尝试,仅使用一个等于FF的字节作为示例。

$bit1 = bindec(00000001);
const BIT2 = bindec(00000010);
$bit3= bindec(00000100);
const BIT4 = 0b00001000;
const BIT5 = 0b00010000;
const BIT6 = 0b00100000;
const BIT7 = 0b01000000;
const BIT8 = 0b10000000;

    $byte4=substr($data[12],0,2);
    $bit4_1= $byte1 & BIT1;
    $bit4_2= $byte1 & BIT2;
    $bit4_3= $byte1 & BIT3;
    $bit4_4= $byte1 & BIT4;
    $bit4_5= $byte1 & BIT5;
    $bit4_6= $byte1 & BIT6;
    $bit4_7= $byte1 & BIT7;
    $bit4_8= $byte1 & BIT8;

我的错误在哪里?

答案

首先,你想在计算中使用$byte4变量,你使用的是$byte1,它没有被初始化,因此被强制为integer并用0初始化。这就是为什么你没有在$bit..变量中看到任何位设置的原因。

其次,你需要将十六进制字符串转换为int,你可以使用hexdec。见下面的例子。

第三,bindec接受字符串,你传递整数,这很好,但我认为你期望000000102,但它会是8。如果你用0开始数字文字,你告诉解析器这个数字是八进制的。所以华侨城的10是DEC的8。并且bindec获取字符串"8",这不是有效的二进制表示,因此它返回0

$ff = hexdec(substr("FFFFFDFF",0,2));
echo $ff & 1; echo "
";
echo $ff & 1 << 1; echo "
";
echo $ff & 1 << 2; echo "
";
echo $ff & 1 << 3; echo "
";
echo $ff & 1 << 4; echo "
";
echo $ff & 1 << 5; echo "
";
echo $ff & 1 << 6; echo "
";
echo $ff & 1 << 7; echo "
";
echo $ff & 1 << 8; echo "
";

echo 00000010; echo " <= this is 8, not 2 
";
echo bindec(00000010); echo " <= this is 0, "8" (not binary) => 0 
";

以上是关于按位运算符PHP的主要内容,如果未能解决你的问题,请参考以下文章

php 使用按位运算符检查权限

按位运算符PHP

PHP 按位与 &

PHP位运算符

PHP位运算

开发人员应该了解哪些有用的按位运算符代码技巧? [关闭]