2

C のバイトから 8 番目のビットを抽出しています。これが私の例です。

register unsigned char byte;

int pos = 7;

int x =(byte >> pos) & 1;   //Method I

int y =(byte & 0x80) >> pos;    //Method II

どちらの手法でも同じ出力が得られますが、一方の方法が他方よりも効率的ですか?

4

3 に答える 3

4

どちらも同じになります。AND 命令と SHR 命令はどちらも、Intel CPU では 1 クロックの命令です。

于 2013-03-20T02:43:12.497 に答える
1

コンパイル時に抽出するビットがわかっている場合は、どちらの方法もほぼ同じ速度である必要があります。

unsigned char val;
const int pos = 4;
...
int x = (val >> pos) & 1;
int y = (val & 0x10) >> pos;

ただし、定数としてではなく実行時に位置を計算している場合は、ANDを最後に実行する方が高速です。

unsigned char val;
int pos;
...
/* requires only a shift and AND */
int x = (val >> pos) & 1;
/* requires two shifts and AND */
int y = (val & (1 << pos)) >> pos;
于 2013-03-20T23:42:32.570 に答える
1

ビット演算は基本的に、コンピューター上で最も高速な処理の 1 つです。違いは非常に小さいので、実際には問題にならないと思います。

于 2013-03-20T02:44:43.543 に答える