加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

如何在PHP中获取二进制数中“隐藏”的十进制数列表?

发布时间:2020-12-13 17:09:27 所属栏目:PHP教程 来源:网络整理
导读:首先,我非常抱歉我写的这个问题写得不好.所以请用英语为母语的人适当改变标题.我的问题很简单,如下: 我使用整数来存储多个类型的一个项目.例如: TYPE A = 1TYPE B = 2TYPE C = 4TYPE D = 8TYPE E = 16etc... 现在DB中的项目具有类型值14,这意味着它已被分
首先,我非常抱歉我写的这个问题写得不好.所以请用英语为母语的人适当改变标题.我的问题很简单,如下:

我使用整数来存储多个类型的一个项目.例如:

TYPE A = 1
TYPE B = 2
TYPE C = 4
TYPE D = 8
TYPE E = 16
etc...

现在DB中的项目具有类型值14,这意味着它已被分配给TYPE B C D.如果它具有例如9的类型值,则意味着它已被分配给TYPE A D.

我需要一个函数,我将提供单一类型的整数,这个函数将返回整数类型的数组.

我可以迭代所有整数并将它们与数字进行比较,但这就是我现在使用的,但我正在寻找一些更有效的方法,如果它存在的话?

在此先感谢您的帮助.

解决方法

这是一个没有任何循环的函数(主要是为了它的乐趣:) :):

function getTypes($int)
{
    $types = array('Type A','Type B','Type C','Type D','Type E');//defining types
    $t = array_reverse(str_split(decbin($int)));//converting $int to an array of bits
    $types = array_slice($types,ceil(log($int,2)));//slicing the array to the same size as number of bits in the $int
    $t = array_combine($types,$t);// Creating a new array where types are keys and bits are values
    return array_keys($t,1);// returning an array of keys which have a value of 1
}

然而,这并不意味着它是有效的.如果使用位掩码,最好使用按位和(&)等按位运算符检查值.
例如,如果要检查整数是否包含类型D和类型E,则应该这样做

if ($integer & 8 & 16)

为了检查每个单独的类型,我将使用bitshift运算符循环

function getTypes($int)
{
    $result = array();
    $types = array('Type A','Type E');
    foreach($types as $type)
    {
        if ($int & 1)//checking if last bit is 1 (exactly the same as if($int%2) )
            $result[]=$type;
        $int>>=1;//shifting integer's bits to the right (exactly the same as $int = $int / 2)
    }
    return $result;
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读