Хорошо, вопрос. Я собрал небольшую маску для опций. В основном моя страница имеет окно списка, которое позволяет использовать несколько вариантов, которые хранят их в списке целых чисел (их значение 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. Кто-нибудь может мне помочь?
В любом случае, чтобы вернуть позицию, а не значение бита? Для примера, я делаю то, что вы сказали. Положение 1,2,4 установлено (значение 1,2,8). Однако мне нужно, чтобы они вернули позиции ... не значение этой позиции. Так что мне нужен мой новый массив, чтобы перечислить 1 2 4 не 1 2 8. – Tom 2010-11-24 17:23:25