C 位操作位检查

C 位操作位检查,c,bit-manipulation,bitwise-operators,bit-shift,C,Bit Manipulation,Bitwise Operators,Bit Shift,这是检查某个变量中是否设置了位并将其存储在另一个变量中的正确方法吗?忽略变量名,image[]和mask变量是1字节,第一行和第二行是2字节 for(i=0; i<16; i++){ if(image[i] & mask1) first_hline_first_row |= (1<<i); else first_hline_first_row &=~ (0<

这是检查某个变量中是否设置了位并将其存储在另一个变量中的正确方法吗?忽略变量名,image[]和mask变量是1字节,第一行和第二行是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是否至少有一个公共位。这是你的意图吗?
第一行&=~0这意味着什么:第一行&=~0零移位没有效果。和它一样好,或者和它一起玩。和它相加也将产生零。它用于清除位?它用于不做任何事情。0好吧,这是什么?是的,只签入了一位,我想在屏蔽的帮助下在新变量中设置一些位。感谢您指出代码中的错误,现在我明白了为什么它不起作用。我在声明与您声明的代码相同的for循环时遇到问题,它的范围从16到<32,存储位的变量具有不同的名称,第一个用于循环工作,第二个不工作,有什么问题吗?如果附加代码,它会更容易更快。我不能。我有几天的时间限制。
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);
     } 
}