2

由于 C 的按位运算符&|~通常也是汇编语言操作码,因此位掩码代码原则上应该非常快。

对于如何在模拟算法的内部循环中添加位掩码,我有一些选择。从本质上讲,它归结为使用一组预先封装好的掩码或使用左移和右移动态更改掩码之间的选择。

是否有特殊的技巧/技术可以使位掩码尽可能避免不必要的开销?从效率的角度来看,以下三种方法中的任何一种是否特别好/坏?

  • 选项 1:循环通过预先封装的掩码数组,例如挑选特定位

    unsigned char mask[8]={0x80,0x40,0x20,0x10,0x8,0x4,0x2,0x1};
    for(i=0;i<8;i++) {
        ...
        (mask[i] & mem_data )
        ...
    

    }

  • 选项 2:在每次循环迭代中向下移动多个位置

    unsigned char mask=0x80;
    for(i=0;i<8;i++) {
         ...
         mem_data & (mask>>i)
         ...
    }
    
  • 选项 3:在每次循环迭代中精确地向下移动一个位置

    unsigned char mask=0x80;
    while(mask) {
          ...
          mem_data & mask
          mask>>=1;
          ...
    }
    

编辑: 从示例中删除了 putchar() 所以它不会分散问题的注意力

4

1 回答 1

2

位掩码常用于嵌入式世界。

并非所有处理器都可以使用变量参数进行按位移位。例如,在 MSP430 处理器上,您一次只能位移一位。该实施将求助于软件以可变数量进行转移。在这种情况下,必须避免选择 2。更一般地查看程序的汇编输出以比较最有效的解决方案。

于 2012-10-15T21:27:22.500 回答