14

重複の可能性:
C または C++ でバイナリ リテラルを使用できますか?

私はCを学んでいますが、最近、次のようにさまざまな方法で整数を表現できることがわかりました。

i( 「人間が読める」値が512であると仮定します。)ここに表現があります:

10 進数:

int i = 512; 

8 進数:

int i = 01000;

16 進数:

int i = 0x200;

基数 2 (またはバイナリ表現) では、5121000000000です。これをCで書くには?

みたいなint i = 1000000000b?これは面白いですが、残念ながらその値を受け入れる C コンパイラはありません。

4

4 に答える 4

34

標準では、「バイナリ リテラル」を作成する方法は説明されていません。ただし、GCC と Clang の最新バージョンでは、16 進構文に似た構文を使用してこの機能をサポートしていますが、次のb代わりになっていxます。

int foo = 0b00100101;

前述のように、このようなバイナリ リテラルを使用すると、Visual Studio の C および C++ コンパイラからロックアウトされるため、使用する場所と方法に注意する必要があります。

C++14 (知っています、これは C ではありません) では、バイナリ リテラルのサポートが標準化されています。

于 2011-06-20T15:53:10.113 に答える
12

これは 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
于 2011-06-20T15:53:25.667 に答える
9

C (そして私は C++ だと思います) では、数値のバイナリ表現はありません。ただし、表示する単純な番号については、ショートカットを使用できます

int i = 1 << 9; /* binary 1 followed by 9 binary 0's */
于 2011-06-20T15:53:28.537 に答える
3

標準 C ではこれを行うことはできません。言語はバイナリで整数リテラルを指定することに対応していません。

于 2011-06-20T15:52:42.123 に答える