C语言 基于位选择的算法效率



我想知道你在开发一种有效的算法来执行基于位的 if/else 切换/案例时的想法是什么。我有 8 位要玩,我需要将它们分为高阶和低阶位,如下所示:

0000 1111

每半部分都包含一些信息,基于哪些信息,位被打开。例如,如果下半部分(在这个小端序机器中1111)实际上是0010,就会发生一些事情。此外,如果高端是1000,就会发生其他事情。

我想右移上半部分并进行AND比较(如(x >> 4) & 8))会很有效,但我不确定为下半部分做什么是明智的,因为左移似乎有点不聪明与一些奇怪的数字进行比较。

再次非常感谢您的见解。

首先

,您示例中的(x >> 4) & 8不太正确。要将较高的半字节(前四位)与n进行比较,您需要((x >> 4) & 15) == n

要将较低的半字节与n进行比较,您只需失去正确的班次:(x & 15) == n

要屏蔽下部 4 位,您可以使用bits & 0xf,如果您想检查 4 位是否具有某个值(即 2 表示 0010),您可以将 ( bits & 0xf ) == 2 用于下半部分,( bits >> 4 ) == 2用于上半部分。

当您只查看单个字节时,Endianess 没有区别。

我不知道你是想要一些高效的东西,如你所说,还是聪明的东西。如果你真的想要快速执行,没有什么比一个有 256 个案例的 switch 语句更快了。看看编译器为 switch 生成的代码,你会发现它非常快。

如果你想要一些聪明的东西,那就是另一回事了。但是,无论它多么聪明,它永远不会比开关更快。

相关内容

  • 没有找到相关文章

最新更新