【问题标题】:How to transfer 15 to 1,2,4,8 in php如何在php中将15转移到1,2,4,8
【发布时间】:2018-12-03 01:06:35
【问题描述】:

就像这样:

1 = 1
2 = 2
3 = 1,2
5 = 1,4
6 = 2,4
7 = 1,2,4
9 = 1,8
15 = 1,2,4,8
31 = 1,2,4,8,16

似乎需要一些二进制函数。

【问题讨论】:

  • 非常简单的解决方案!每个数字都有所有设置位
  • 到目前为止你做了什么?

标签: php binary


【解决方案1】:

找到这个!

function split($n) {
    $n |= 0;
    $pad = 0;
    $arr = array();
    while ($n) {
        if ($n & 1) array_push($arr, 1 << $pad);
        $pad++;
        $n >>= 1;
    }
    return $arr;
}

【讨论】:

    【解决方案2】:

    您可以使用 decbin 将数字设为二进制,然后使用数组作为二进制数的查找。
    我使用 array_intersect 来查找“真实”值并使用 array_intersect_key 在 $arr 中匹配它们。 这是一个非循环解决方案,可能更快也可能不会更快。

    $arr= [16,8,4,2,1];
    $number = 13;
    $bin = str_split(str_pad(decbin($number),count($arr),"0",STR_PAD_LEFT));
    
    Echo implode(",", array_intersect_key($arr,array_intersect($bin, ["1"])));
    

    https://3v4l.org/t9QQc

    如果顺序很重要,那么您需要在输出之前对其进行排序。

    $nums = array_intersect_key($arr,array_intersect($bin, ["1"]));
    sort($nums);
    Echo implode(",", $nums);
    

    【讨论】:

      猜你喜欢
      • 2021-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多