我想计算所有二进制数,直到x位和y位
c#
有没有一种方法可以轻松计算具有特定数量的设置位的所有数字的序列?
例如,我想将所有 2 位数字设置为最多 4 位:
3: has 2 bits set to true
5: ,,
6: ,,
9: ,,
10: ,,
12: ,,
有没有办法在不手动计算位数的情况下确定这些数字?
编辑:数字的顺序并不真正相关。我确实想知道获取所有这些的最快方法,尽管对于特定的位数设置和最大位数。(我不需要可以确定此序列中第 n 个数字的方法)
Edit2:我想要的原因是能够像这里完成的那样获得列表中元素的组合:值列表的所有可能的组合。此解决方案将提供所有组合,其中我只想要具有 8 个唯一值的组合。
回答
是的,有一点技巧可以k在n地方生成所有设置位的组合。
这里描述。
using System;
public class Test
{
public static void Main()
{
int k = 2;
int n = 4;
int v = (1 << k) - 1;
int finish = v << (n - k);
Console.WriteLine(v);
while (v != finish) {
int t = (v | (v - 1)) + 1;
v = t | ((((t & -t) / (v & -v)) >> 1) - 1);
Console.WriteLine(v);
}
}
}