从单个整数中提取一组值

Jar*_*und 0 perl bitwise-operators subroutine

我有很多东西(让我们把它们称为节点......没关系),方便地称为node1,node2,... nodeN.

棘手的部分是我需要一个perl子程序,它接受一个引用一组节点的整数.我的方法是:

  1. 每个节点都有一个基于2的幂的值,如下所示:

    • node1 = 1
    • node2 = 2
    • node3 = 4
    • node4 = 8
    • ...
    • node8 = 128
    • 等等
  2. 将每个节点的值相加以生成整数.例如,节点1,3,4和7导致整数为77.

现在,我将如何创建一个采用类似整数的子程序并返回一个节点数组?


PS:

  • 最大节点数是可配置的.16是合理的最大值.
  • 如果我接近这种过于繁琐的方式,我愿意接受建议,以便更好地从单个值生成一组节点.

cho*_*oba 5

将$ max设置为节点数(例如16).

sub nodes {
    my $num = shift;
    return grep { $num & 2 ** $_ } 1 .. $max - 1;
}
Run Code Online (Sandbox Code Playgroud)