2012-01-21 3 views
0

Допустим, у меня есть к следующей таблице со значениями (первая строка описания)получить соответствующие значения из шестнадцатеричного

ОПИСАНИЕ -> десятичное значение -> BIT НОМЕР

Option1 -> 1 -> 1

Вариант2 -> 2 -> 2

Вариант3 -> 4 -> 3

ОПЦИЯ4 -> 8 -> 4

OptionX -> 137438953472 -> 38 

Теперь у меня есть следующее значение: 0x7000000800000000. Как я могу узнать, какие параметры были выбраны на основе этого числа?

ответ

2
ulong v = 0x7000000800000000; 
for(int i = 1; v != 0; ++i) { 
    if ((v & 1) != 0) Console.WriteLine(i); 
    v >>= 1; 
} 

или использовать класс BitVector.

+0

В то время как логика правильная, это фактически не компилируется;) – ChrisF

+0

@ChrisF: Почему C# не может включать обычные неявные преобразования? –

+0

Возможно, код, позволяющий им стучать по эффектам? (Чистая догадка). – ChrisF

2

Используйте побитовый оператор И & и, возможно, также операторы бит-сдвига, << (сдвиг влево) и >> (сдвиг вправо).

Например, опция n была выбрана, если (options & (1 << (n - 1))) != 0 - это правда.

+0

Должен ли я использовать какой-то цикл? –

Смежные вопросы