2017-01-28 22 views
0

の31ビットの値を読み出すことは私の質問であるは32ビット整数1つの方法の第31ビット(MSB)を読み出すために32ビット整数

int main(int argc, char *argv[]) { 
    int b =0x80005000; 
    if(b&(1<<31)) 
     printf("bit is one\n"); 
    else 
     printf("bit is zero\n"); 
return 0; 
} 

以下のとおりであり、これを行うための任意の他の最適な方法があります命令サイクルは少なくて済みますか?

+0

必要なマスクをあらかじめ定義しておくだけです。 –

+0

@ LongSmith - コンパイラがあまりにも愚かでないと仮定すると、マスクはあらかじめ定義されています – 4386427

+0

最大限の最適化を行ってコードをコンパイルし、生成されたコードを見ましたか? – 4386427

答えて

3

2の補数表現では、数値が負であるときにMSBが設定され、数値が負でないときにはクリアされるため、これも機能します。 GCCは、このコードを生成し出力と同じ - 実際に

int b = 0x80005000; 
if (b < 0) 
    printf("bit is one\n"); 
else 
    printf("bit is zero\n"); 

は、あなたがが書いたif(b&(1<<31))コードため、GCCは0に比較し、記号をチェックするアセンブリを生成しません。

関連する問題