[gcc]値を2進数で表記する

C言語のプログラムでは”0x”の接頭語で16進数の値を指定可能ですが、gccでは”0b”の接頭語を付けることで2進表記を行うことができます。

プログラム

printf( "%d\n", 0x6f );
printf( "%d\n", 0b01101111 );



実行結果

111
111




ただしこの表記はgccで使用可能なもので、ANSI C標準では規格化されて無いです。
ですので、gcc以外のコンパイラを使用した場合、正しくコンパイルされない場合があり、ポータビリティが損なわれるので注意が必要です。

この機能は、gnu.orgにあるgccのオンラインドキュメント(http://gcc.gnu.org/onlinedocs/gcc/Binary-constants.html)にもC言語の拡張機能として、以下のように説明されています。

6.60 Binary constants using the `0b' prefix
 
Integer constants can be written as binary constants, consisting of a sequence of `0' and `1' digits, 
prefixed by `0b' or `0B'. This is particularly useful in environments that operate a lot on 
the bit-level (like microcontrollers).
 
The following statements are identical:
 
     i =       42;
     i =     0x2a;
     i =      052;
     i = 0b101010;
 
The type of these constants follows the same rules as for octal or hexadecimal integer constants, 
so suffixes like `L' or `UL' can be applied.



ざっくり日本語で意訳すると以下のような感じになります。


6.60 “0b”の接頭語を使用した二進数の定数

“0b”の接頭語の後に0,1の値を羅列する事で、整数の定数値を二進表記で記述することが出来ます。
この記法は、マイコンのようなビット単位で操作するような環境で便利です。

以下の4つは同じ意味になります。
i = 42;
i = 0x2a;
i = 052;
i = 0b101010;

これらの定数は8進や16進表記の定数と同じルールなので、接尾語に’L’や’UL’を付与する事でlong型やunsined long型である事を明記することが出来ます。

関連記事

コメントを残す

メールアドレスが公開されることはありません。