由于 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() 所以它不会分散问题的注意力