2015-05-25 5 views
0

Правильно ли это проверить, установлены ли биты в некоторой переменной и сохранить их в другой переменной? Просто игнорируйте имена переменных, изображения [] и переменные маски - 1 байт, а first_hline_first_row и second_hline_first_row - 2 байта.Побитовая проверка бит бит

for(i=0; i<16; i++){ 

    if(image[i] & mask1)   first_hline_first_row |= (1<<i); 
    else       first_hline_first_row &=~ (0<<i); 

    if(image[i] & mask2)   second_hline_first_row |= (1<<i); 
    else       second_hline_first_row &=~ (0<<i); 
    } 
+0

Что это значит сделать: 'first_hline_first_row & = ~ (0 << I);'? –

+0

Смещение нулевого результата не приводит к эффекту. Как и OR-ing с ним. ANDing с ним также будет генерировать нуль. –

+0

Используется для очистки бит? – Lazar

ответ

0

Две вещи:

  • image[i] & mask1 только проверяет, есть ли у image[i] и mask1 по крайней мере, один бит общего. Это ваше намерение?
  • first_hline_first_row &=~ (0<<i); ничего не делает (~(0<<i) - все).

Из комментариев я предполагаю, что это то, что вы имели в виду, чтобы написать:

for(i=0; i<16; i++){ 
    if(image[i] & mask1) 
    { 
     first_hline_first_row |= (1<<i); 
    } 
    else       
    { 
     first_hline_first_row &=~ (1<<i); 
    } 

    if(image[i] & mask2) 
    { 
     second_hline_first_row |= (1<<i); 
    } 
    else 
    { 
     second_hline_first_row &=~ (1<<i); 
    } 
} 
+0

Да только один бит проверен в этом И, я хочу установить некоторые бит в новой переменной с помощью маскировки. – Lazar

+0

Благодарим вас за то, что указали мне, что было не так в коде, теперь я понимаю, почему это не сработало. – Lazar

+0

У меня проблема при объявлении того же для цикла, который делает то же, что и указанный вами код, его диапазон варьируется от 16 до <32, а переменные, где хранятся биты, имеют разные имена, сначала для работы цикла, но вторая не работает, в чем проблема ? – Lazar

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