Битовая операция: получить один бит в числе - PullRequest
0 голосов
/ 26 марта 2012

Есть ли способ получить определенный бит в шестнадцатеричном числе для проверки?

например: 0x11, и я хочу знать, равен ли индекс 2 1. Если это так, я выполню действие.

Я смотрю с битовыми операциями, но ничего не нашел о конкретном бите.

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

Исходя из 0x11, я собираюсь предположить , что вы работаете с C или чем-то достаточно похожим, чтобы использовать те же побитовые операторы.

В этом случае вы начинаете с создания битовой маски, в которой есть бит, о котором вы заботитесь. Чтобы получить маску с этим установленным битом, вы обычно берете 1 (в котором установлен только его младший значащий бит) и сдвигаете его влево на соответствующее количество мест, чтобы поместить этот единственный бит в положение, в котором вы заинтересованы.

Затем вы делаете побитовую and между маской и входом.

Наконец, вы проверяете, был ли результат этого and нулевым или нет.

int position = 2;

int bitmask = 1 << position;

if (input & mask) 
    // that bit was a 1
else
    // that bit was a 0
1 голос
/ 26 марта 2012

ммммм .... что если вы продублируете число, измените значение этой цифры на ноль и используете XOR?

Пример: я хочу знать, является ли третья цифра (слева направо) единицей или нулем:

 001011011
           XOR
 000011011  
 ---------
 001000000   // "TRUE"


 000011011
           XOR
 000011011  
 ---------
 000000000   // "FALSE"


 111111111
           XOR
 110111111  
 ---------
 001000000   // "TRUE"

и т.д ...

...