如何用php判断一个二进制数中,哪些位是0 而 哪些是1?

已知一个二进制数(数位可能有600位左右),例如
$a= 100010010;
需要通过php判断出(从右往左)的 第0 第2 第3 第5 第6 第7位是0
从而得到
$ar0=array(0,2,3,5,6,7);
$ar1=array(1,4,8);

应该如何实现呢?

阅读 5k
3 个回答
$binary = ".....";
$binary = str_split($binary);

// 0
$a0 = array_keys(array_filter($binary, function ($bit) {
    return !$bit;
}));

// 1
$a1 = array_keys(array_filter($binary));

for循环啊

先把2进制作为字符串分割每个数字后赋值给数组aTemp。

伪码:

for(int i=0; i<aTemp.length; i++)
{
    if((int)aTemp[i]>0)
    {
        a1.push(i);  //1 记录1的位置
     }
     else
     {
         a2.push(i); //0 记录0的位置
     }
}
// 给定一个 2 进位数
$binaryNumber = 0b100010010;

// $result[0] 存 0 的位数,$result[1] 存 1 的位数
$result = [[], []];

$binaryNumber <<= 1; // 先左移一位,方便之后循环
$location = 0;

while ($binaryNumber >= 2) {
  $binaryNumber >>= 1; //先右移一位
  $result[$binaryNumber & 1][] = $location++;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题