基于位选择的算法效率

| 我想知道您的想法在开发一种有效的算法来执行基于位的if / else开关/案例的想法。我有8位要玩,需要将它们分为高位和低位,如下所示:
0000 1111
每个部分都包含一些信息,基于这些信息可以打开位。例如,如果下半部分(在这个小端序机中为
1111
)实际上是
0010
,则发生了某些情况。此外,如果高端为
1000
,则会发生其他情况。 我猜想右移上半部分并进行
AND
比较(例如ѭ5be)会比较有效(但我不确定下半部分会做什么,因为左移并与其他部分进行比较似乎不太明智怪异的数字。 再次感谢您的见解。     
已邀请:
首先,您的示例中的
(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个case的switch语句更快的了。看一下编译器为switch生成的代码,您会发现它非常快。 如果您想要一些聪明的东西,那是另一回事。但是,无论它多么聪明,它永远不会比开关快。     

要回复问题请先登录注册