我想知道你在开发一种有效的算法来执行基于位的 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 生成的代码,你会发现它非常快。
如果你想要一些聪明的东西,那就是另一回事了。但是,无论它多么聪明,它永远不会比开关更快。