4

この一連のビット「000001111110001」(15ビット)をC言語で変数に格納するにはどうすればよいでしょうか。

unsigned int に格納しようとしました:

unsigned int key=000001111110001;

しかし、そうではないので、私を助けてください。

4

2 に答える 2

8

通常、ビットは一度に 4 ビットに分割され、16 進数表現に変換されます。

unsigned int key = 0x03F1;

ビットを一度に 3 ビットに分割して 8 進数表現 ( 01761) を使用するか、通常の 10 進数表現 ( )を使用するかを選択できます1009

ビットを使用したい場合は、次のように自分で構築できます。

unsigned int key = (1<<9)|(1<<8)|(1<<7)|(1<<6)|(1<<5)|(1<<4)|(1<<0);

または、おそらくもう少しニーモニックです。

#define b4(x) \
    ((((0##x >> 9) & 01) << 3) | \
     (((0##x >> 6) & 01) << 2) | \
     (((0##x >> 3) & 01) << 1) | \
     (((0##x >> 0) & 01) << 0))
#define b8(x1, x0) ((b4(x1) << 4) | b4(x0))
#define b16(x3, x2, x1, x0) ((b8(x3, x2) << 8) | b8(x1, x0))

unsigned int key = b16(0000,0011,1111,0001);

マクロb4(x)は、入力として x が 4 つの 2 進数であると想定し、それを 12 ビットの 8 進数に変換します (つまり、1 つの 2 進数を表すために 3 ビットが使用されます)。次に、その 12 ビットの 8 進数を真の 4 ビットの数値に変換します。b8(a,b)、およびb16(a,b,c,d)拡張しb4(x)ます。

手の込んだマクロ トリックを使えば、さらに自動化することができます。たとえば、P99を参照してください。

于 2013-06-16T17:38:34.290 に答える
4

0bコンパイラがサポートしている場合 (FDinoff コメントを参照)、前に:を付ければ、整数値をバイナリ形式で表すことができます。

unsigned int x = 0b000001111110001;

いくつかの代替案:

  • 000001111110001100910 本指の人間用なので、次の値を表すだけです。

unsigned int x = 1009;

  • 0000011111100013F116 進数です。0x接頭辞を使用してください:

unsigned int x = 0x3F1;

  • もっと複雑にしたい場合は、8 進形式で表し、0接頭辞を使用します。

unsigned int x = 01761;

問題は、1009(000001111110001、3F1、1761)をどのように表現しても、常に同じビットがそれらのsizeof(unsigned int)バイトに入るということです(少なくとも同じエンディアンの場合)。

于 2013-06-16T17:42:23.093 に答える