c - 按位运算位检查

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

这是检查某个变量中是否设置了位并将它们存储在另一个变量中的正确方法吗?只需忽略变量名称,image[] 和 mask 变量为 1 个字节,first_hline_first_row 和 secondary_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) 都是 1)。

从评论中我猜测这就是您要写的内容:

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

关于c - 按位运算位检查,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30440175/

相关文章:

c - 为什么在将二维数组传递给 C 函数时必须提供维度?

java - 检查部分已知的整数是否在某个范围内

java - Java 中的位旋转 - 幂集,按大小排序

c - 如何将完整的 UTF-8 十六进制值读入 int

javascript - 产生预期结果的函数中使用的方法背后的数学推理是什么?

java - ArrayDeque.allocateElements 的实现(按位运算)

客户端端口号

c - 如何使用 ETW(StartTrace 等)实时获取事件?

c - 使用 realloc 连接字符串

iphone - Objective-C 中的位转换工具