この一連のビット「000001111110001」(15ビット)をC言語で変数に格納するにはどうすればよいでしょうか。
unsigned int に格納しようとしました:
unsigned int key=000001111110001;
しかし、そうではないので、私を助けてください。
この一連のビット「000001111110001」(15ビット)をC言語で変数に格納するにはどうすればよいでしょうか。
unsigned int に格納しようとしました:
unsigned int key=000001111110001;
しかし、そうではないので、私を助けてください。
通常、ビットは一度に 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を参照してください。
0b
コンパイラがサポートしている場合 (FDinoff コメントを参照)、前に:を付ければ、整数値をバイナリ形式で表すことができます。
unsigned int x = 0b000001111110001;
いくつかの代替案:
000001111110001
は1009
10 本指の人間用なので、次の値を表すだけです。unsigned int x = 1009;
000001111110001
は3F1
16 進数です。0x
接頭辞を使用してください:unsigned int x = 0x3F1;
0
接頭辞を使用します。unsigned int x = 01761;
問題は、1009(000001111110001、3F1、1761)をどのように表現しても、常に同じビットがそれらのsizeof(unsigned int)
バイトに入るということです(少なくとも同じエンディアンの場合)。