1

ビットに基づいてif/elseスイッチ/ケースを実行するための効率的なアルゴリズムを開発する上であなたのアイデアは何だったのだろうかと思いました。私は8ビットで遊ぶ必要があり、次のようにそれらを上位ビットと下位ビットに分割する必要があります。

0000 1111

各半分には、ビットがオンになる情報ベースが含まれています。たとえば、下半分(1111このリトルエンディアンのマシン)が実際0010にある場合、何かが起こります。さらに、ハイエンドがである場合1000、何か別のことが起こります。

上半分を右シフトして比較するのが効率的だと思いますAND(x >> 4) & 8)たとえば、左シフトして奇妙な数値と比較するのは少し賢くないように見えるので、下半分に対して何をするのが賢明かはわかりません。

繰り返しになりますが、あなたの洞察に感謝します。

4

3 に答える 3

3

まず第一に(x >> 4) & 8、あなたの例のは完全に正しくありません。上位ニブル(上位4ビット)をと比較するにはn、が必要((x >> 4) & 15) == nです。

下のニブルをと比較するにはn、右シフトを失うだけです(x & 15) == n

于 2011-05-16T17:06:39.230 に答える
1

使用できる下位4ビットをマスクするためにbits & 0xf、4ビットが特定の値(つまり、0010である2)を持っているかどうかを確認したい場合は( bits & 0xf ) == 2、下半分と( bits >> 4 ) == 2上半分に使用できます。

1バイトだけを見ている場合、エンディアンは何の違いもありません。

于 2011-05-16T17:06:50.650 に答える
0

あなたが言うように効率的なものが欲しいのか、それとも賢いものが欲しいのか、私にはわかりません。本当に高速な実行が必要な場合は、256 ケースの switch ステートメントより高速なものはありません。コンパイラが switch に対して生成するコードを見ると、非常に高速であることがわかります。

何か賢いものが欲しいなら、それは別の取引です。しかし、どんなに賢くても、スイッチより速くなることはありません。

于 2011-05-16T17:12:00.817 に答える