按位相等

Wil*_*sem 3 c c# optimization bit-manipulation

我需要在两个字节之间执行按位相等.这意味着,例如,如果我有两个字节:00011011和00011110,结果是11111010我看到的唯一快速方法是使用以下语句

byte a, b;//set input bytes
byte c = ~(a^b);//output bytes
Run Code Online (Sandbox Code Playgroud)

但我想知道是否有更快的解决方案.在这些相等操作之后,我想掩盖我需要的位.所以我需要使用AND操作.所以代码变成:

byte a, b;//set input bytes
byte m;//mask, intresting bits are set to 1, others to 0
byte c = (~(a^b))&m;//output bytes
Run Code Online (Sandbox Code Playgroud)

是不是有任何更快,更简单的方法,不需要使用所有这些按位操作,因为这部分代码将经常被调用.

Mar*_*ers 6

我怀疑它可以在更少的操作中完成.这看起来最优.也许你可以将〜(a ^ b)存储在查找表中(256*256个条目)?我怀疑你会得到很多好处甚至可能使事情变得更糟,但你可以尝试一下.

  • OP应该注意,编译器为索引表所执行的操作可能至少与直接计算结果的操作一样昂贵(可能更多).并没有考虑额外的内存访问. (5认同)
  • 高速缓存未命中比算术运算慢2个数量级. (3认同)