繁体   English   中英

查找整数的设置位

[英]Finding set bits of an integer

好的,有一个问题。 我组装了一些面罩供选择。 基本上,我的页面有一个列表框,允许多个选择,将它们存储在整数列表(其ID值)中。 总共有14个选择(因此ID val 1-15)。 之所以将它组装成一个位掩码,是因为我不想用数字硬编码,以防万一我想向数据库表(列表框从中填充)中添加选项。 另外,我也不想向我的SQL存储过程发送14个参数(因此硬编码为14)。 我可以发送此整数并对其进行解构(稍后)。

但是,由于其他原因,现在我需要找出在我的整数中设置了哪些位。 基本上我有财产。 get从整数列表中组合位掩码(从用户选择中获取),并返回该二进制十进制值的整数。 这是构建位掩码的汇编代码。

//optsNum is my integer list. This is the list containing the ID nums of the selections.
//so if the user selects the first, second, and fourth option, the list contains 1,2,4 (count 3)
//typeCount is an integer of the amount of options in the list box
int total = 0;
for (int c = 0; c < optsNum.Count(); ++c)
{
    for (int i = 0; i <= typeCount; i++)
    {
        if ((i + 1) == optsNum[c})
            total += (1 << i);
    }
}
return total;

因此,如果设置了第一个,第二个和第四个,则我的整数是11。这可行,我测试了所有选择,并且返回了正确的整数/十进制值。

现在,我需要帮助来设置我的设置方法。 这需要使用我拥有的十进制/整数,找出设置了哪些位并将其放回列表中。 因此,如果我的值是11,则需要将整数1,2,4放入列表。 有谁能够帮助我?

您应该改用BitArray 它为您执行按位运算,并且具有简单的界面。
如果您永远不需要超过32个布尔值,则还可以使用较小的BitVector32


要回答您的问题,您需要遍历每个位(使用简单的for循环)并检查value & (1 << i)以查看是否设置了第i位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM