可能性のある複製:
CまたはC++でバイナリリテラルを使用できますか?
私はCを学習していますが、最近、整数を次のようにさまざまな方法で表すことができることがわかりました。
(i
の(人間が読める)値が512であると仮定します)。
int i = 512;
int i = 01000;
int i = 0x200;
何かのようなもの int i = 1000000000b
?これはおかしいですが、残念ながらCコンパイラはその値を受け入れません。
この規格では、「バイナリリテラル」を作成する方法は説明されていません。ただし、GCCおよびClangの最新バージョンは、b
ではなくx
であることを除いて、16進構文と同様の構文を使用してこの機能をサポートしています。
int foo = 0b00100101;
前述のように、そのようなバイナリリテラルを使用すると、Visual StudioのCおよびC++コンパイラーからロックアウトされるため、それらをどこでどのように使用するかに注意する必要がある場合があります。
C++ 14(知っている、知っている、これはCではない)は、バイナリリテラルのサポートを標準化しています。
Cではこれを行うことはできません。
しかし、あなたはC++を学んでいると言いました。 C++では、 ユーザー定義のリテラル を許可するC++ 0xまで BOOST_BINARY を使用できます。
ただし、16進数を2進数に変換したり、元に戻したりするのは簡単です。
与えられた2進数について、数字を4つのグループにグループ化し、それを学習します
0000 <-> 0
0001 <-> 1
0010 <-> 2
0011 <-> 3
0100 <-> 4
0101 <-> 5
0110 <-> 6
0111 <-> 7
1000 <-> 8
1001 <-> 9
1010 <-> A
1011 <-> B
1100 <-> C
1101 <-> D
1110 <-> E
1111 <-> F
あなたの頭の中でこの翻訳を行うことを数回試みた後、あなたはそれに慣れるでしょう。 (もちろん、8進数でも同じことができますが、16進数は8進数よりもさらにコンパクトです。)
あなたの具体的な例として:
1000000000 -> 10 0000 0000 -> 0010 0000 0000 -> 0x200
C(そして私はC++を信じています)では、数値のバイナリー表現はありません。ただし、表示する単純な数については、ショートカットを使用できます
int i = 1 << 9; /* binary 1 followed by 9 binary 0's */
標準のCではこれを行うことはできません。この言語では、バイナリで整数リテラルを指定することはできません。