2016-02-17 7 views
2

Я преподаю себя, как выполнить bitmasking и битовые операции в С.Неподписанный INT битовая для нескольких битовых позиций

Скажем, я хочу иметь беззнаковое целое битовую маску всех 0s с 1 по битам 12 и 23. Я думал о расчете битовой маски, установив переменную

unsigned int bitmask = 1<<12 & 1<<23; 

Как бы я идти о вычислении битовой маски, которая имеет несколько требований?

Любые предложения и указатели оцениваются. Спасибо.

+3

Вы хотите взглянуть на [** Bit Twiddling Hacks **] (http://graphics.stanford.edu/~seander/bithacks.html). Это хорошая ссылка для различных побитовых операций. Также см. [** Хакерский восторг - глава 2 **] (http://hackersdelight.org/basics2.pdf). –

ответ

4

Побитовое И & не является правильным оператором, так как оно создавало бы нуль. Вам нужно побитовое | вместо:

unsigned int bitmask = 1U<<12 | 1U<<23; 

Если вы ищете битовую маску с несколькими битами набора, вы можете использовать for цикл:

int bits[] = {1, 5, 13, 28}; 
unsigned int bitmask = 0; 
for (int i = 0 ; i != 4 ; i++) { 
    bitmask |= 1U << bits[i]; 
} 
+0

Я вижу. Для пояснения, поскольку я новичок в манипуляции бит, U означает, что значение 1 не указано ?; побитовое ИЛИ необходимо, потому что побитовое ИЛИ является только 0, когда оба значения сдвига становятся 0? –

+0

@Justin_Finland Вы верны в обоих пунктах. – dasblinkenlight

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