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型である事を明記することが出来ます。
関連記事
コメントを残す