按位运算位检查

时间:2015-05-25 14:03:55

标签: c bit-manipulation bitwise-operators bit-shift

这是检查某些变量中是否设置了位并将它们存储在另一个变量中的正确方法吗?只需忽略变量名,image []和掩码变量为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);
    }   

1 个答案:

答案 0 :(得分: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);
     } 
}