web-dev-qa-db-ja.com

Cは、基数2のintを表します

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

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

iの(人間が読める)値が512であると仮定します)。

10進数:

int i = 512; 

8進数:

int i = 01000;

16進数:

int i = 0x200;

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

何かのようなもの int i = 1000000000b?これはおかしいですが、残念ながらCコンパイラはその値を受け入れません。

13
DevelRoot

この規格では、「バイナリリテラル」を作成する方法は説明されていません。ただし、GCCおよびClangの最新バージョンは、bではなくxであることを除いて、16進構文と同様の構文を使用してこの機能をサポートしています。

int foo = 0b00100101;

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

C++ 14(知っている、知っている、これはCではない)は、バイナリリテラルのサポートを標準化しています。

30
zneak

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
12
jason

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

int i = 1 << 9; /* binary 1 followed by 9 binary 0's */
9
pmg

標準のCではこれを行うことはできません。この言語では、バイナリで整数リテラルを指定することはできません。

3
David Heffernan