好的,有一个问题。我组装了一些面罩供选择。基本上,我的页面有一个列表框,允许多个选择,将它们存储在整数列表(其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
class代替;它为您执行按位运算,并且具有简单的界面。
如果您永远不需要超过32个布尔值,则还可以使用较小的BitVector32
class。
要回答您的问题,您需要遍历每个位(使用简单的for
循环)并检查value & (1 << i)
以查看是否设置了i
位。