2017-09-10 4 views
-1

私はいくつかのint xを持っているとしましょう。私はxの最初の5ビットを印刷したいだけです。これどうやってするの?Cで5ビット/ nビット数をプリントする方法は?

printf("%d", x & 0x05); 

xの最初の5ビットを出力すると聞いたことがありますが、これは私の機能では0を出力します。あなたが望むビットマスク、代わりの0x(16進数)を見ることができるように

+1

5つの最下位ビットを得るには、 'x&((1 << 5) - 1)'と書く。 5つの最上位ビットについては、右シフト演算子( '' '')も使用する必要があります。 – NPE

+1

0x05は第1ビットと第3ビットです。ローの5は0x1fです。 – Kevin

+4

マスク「0x05」は、ビット「0」と「2」のみを分離します。 '0'から' 4'ビットを分離するには '0x1F'マスクを使用する –

答えて

0

あなたはGCC、Visual Studioの2015(またはそれ以降)でコンパイルされている場合、またはクラン、あなたは、0b(バイナリ)の接頭辞を使用することができます接頭辞は少し直感的ではありません。

int x = 127; 
printf("%d\n", x & 0b11111000); // Prints 120 
printf("%d\n", x & 0b00011111); // Prints 31 

これらの実施例は、3つの最下位ビット(1、2および4)、または離脱3つの最上位ビット(64、32及び16)、他の唯一の5

場合をマスクします上記のリストにないコンパイラでコンパイルしている場合は、いつでもBOOST_BINARYマクロをインポートできます。

実際のビットを表示する場合は、this questionが必要です。

+0

0bは、最近のバージョンでサポートされている非標準の拡張機能です(nビットの位置からのnビットの位置printf( "%u"、(x&((1 << nbits - 1))<< nbit) >> gccとclangのバージョンですが、一般的に他のコンパイラではありません –

+0

Huh。Touche @ChrisDodd。私はいつもこれがC標準の一部であると仮定しましたが、あなたは本当に正しいです。 – Addison

関連する問題