按位相等

时间:2010-02-04 15:28:16

标签: c# c optimization bit-manipulation

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

byte a, b;//set input bytes
byte c = ~(a^b);//output bytes

但我想知道是否有更快的解决方案。在这些相等操作之后,我想掩盖我需要的位。所以我需要使用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

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

4 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

您正在寻找错误的地方进行此优化;你不会在这里找到任何更好的按位操作。即使你这样做,也很难加快速度。真正的胜利将来自于一次处理超过一个字节。处理器已经不得不进行一系列位移和屏蔽操作,以便它可以假装您使用字节。一次处理1个字的字节数组,或者使用矢量指令(如果可用)。

答案 2 :(得分:2)

这些操作似乎足够快,说实话。我认为您不应该尝试进一步优化它们,而是首先完成您的软件,看看您是否对整体性能感到满意,如果不是,请使用分析器。我很确定问题会出在其他地方。

答案 3 :(得分:2)

您想要的是XNOR操作。不幸的是,C#/ Mono不支持。我认为你的解决方案是最佳的。

相关问题