1

我想知道您在开发基于位的 if/else 切换/案例的有效算法时的想法是什么。我有 8 位可以使用,我需要将它们分为高阶位和低阶位,如下所示:

0000 1111

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

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

再次,非常感谢您的见解。

4

3 回答 3

3

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

要将下半字节与 进行比较n,您只需失去右移:(x & 15) == n

于 2011-05-16T17:06:39.230 回答
1

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

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

于 2011-05-16T17:06:50.650 回答
0

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

If you want something clever, that's a different deal. But, no matter how clever it is, it's never going to be faster than a switch.

于 2011-05-16T17:12:00.817 回答