题
好,有一个问题。我已经组装选项的位掩码。基本上我的页面有一个列表框,允许多项选择,在一列整数存储它们(他们的ID值)。有14点总的选择(因此ID VAL 1-15)。我组装成一个位掩码,这样做的原因是因为我不想硬编码在许多的情况下,我想选项添加到数据库表(其中从列表框中填入)。另外,我也不想在14个参数,以我的SQL存储过程来进行发送(因此在14号硬编码)。我可以在这个整数发送和解构它(后面的步骤)。
不过,现在我需要找出哪些位在我的另一个原因整数设置。基本上我有一个属性。在获得从整数(来自用户的选择得到)的列表组装位掩码,并返回该二进制十进制值的整数。下面是位掩码的建筑我组装代码。
//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
th位是否被设置。
不隶属于 StackOverflow