如何使用C语言将这一系列位“000001111110001”(15 位)存储在变量中。
我试图将它存储到 unsigned int 中:
unsigned int key=000001111110001;
但它没有,所以请帮助我。
如何使用C语言将这一系列位“000001111110001”(15 位)存储在变量中。
我试图将它存储到 unsigned int 中:
unsigned int key=000001111110001;
但它没有,所以请帮助我。
通常,这些位一次分解为 4 位,然后转换为十六进制表示:
unsigned int key = 0x03F1;
您可以选择一次将位分解为 3 位并使用八进制表示 ( 01761
),或使用常规十进制表示 ( 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 个二进制数字作为输入,并将其转换为 12 位八进制数(即 3 位用于表示单个二进制数字)。然后,它将 12 位八进制数转换为真正的 4 位数字。b8(a,b)
, 并b16(a,b,c,d)
延伸到b4(x)
.
更高级的宏技巧可能会帮助您以更自动化的方式进行操作。参见例如P99。
如果你的编译器支持它(见 FDinoff 注释),你可以用二进制格式表示一个整数值,如果你在它前面加上一个0b
:
unsigned int x = 0b000001111110001;
一些替代方案:
000001111110001
是1009
针对十指人的,所以只表示这个值:unsigned int x = 1009;
000001111110001
是3F1
十六进制,使用0x
前缀:unsigned int x = 0x3F1;
0
前缀:unsigned int x = 01761;
问题是,无论您如何表示 1009(000001111110001、3F1、1761),这些sizeof(unsigned int)
字节中总是会出现相同的位(至少对于相同的字节序)。