按位运算位校验

Bitwise operation bit check

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

两件事:

  • 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);
     } 
}