我正在实现一个库,我广泛使用.Net BitArray类,需要等效的Java BitSet.Cardinality()方法,即返回设置的位数的方法.我正在考虑将其实现为BitArray类的扩展方法.平凡的实现是迭代和计数位集(如下所示),但我希望更快的实现,因为我将执行数千个集合操作并计算答案.有比下面的例子更快的方法吗?
count = 0;
for (int i = 0; i < mybitarray.Length; i++)
{
if (mybitarray [i])
count++;
}
Run Code Online (Sandbox Code Playgroud) 任务是仅使用按位运算符实现位计数逻辑.我的工作正常,但我想知道是否有人可以提出更优雅的方法.
只允许使用Bitwise操作.没有"if","for"等
int x = 4;
printf("%d\n", x & 0x1);
printf("%d\n", (x >> 1) & 0x1);
printf("%d\n", (x >> 2) & 0x1);
printf("%d\n", (x >> 3) & 0x1);
Run Code Online (Sandbox Code Playgroud)
谢谢.
好吧,我似乎无法弄明白:给出以下内容:
IP address = 192.168.1.0
Subnetmask = 255.255.255.240
使用c#,如何计算CIDR表示法192.168.1.0/28?有没有一种简单的方法来实现这一目标?我错过了什么吗?
谢谢!
有没有一种方法可以轻松计算具有特定数量的设置位的所有数字的序列?
例如,我想将所有 2 位数字设置为最多 4 位:
3: has 2 bits set to true
5: ,,
6: ,,
9: ,,
10: ,,
12: ,,
Run Code Online (Sandbox Code Playgroud)
有没有办法在不手动计算位数的情况下确定这些数字?
编辑:数字的顺序并不真正相关。我确实想知道获取所有这些的最快方法,尽管对于特定的位数设置和最大位数。(我不需要可以确定此序列中第 n 个数字的方法)
Edit2:我想要的原因是能够像这里完成的那样获得列表中元素的组合:值列表的所有可能的组合。此解决方案将提供所有组合,其中我只想要具有 8 个唯一值的组合。