如何使用C语言在变量中存储一系列位

时间:2013-06-16 17:37:03

标签: c

如何使用 C 语言将这一系列“000001111110001”(15bits)存储在变量中。

我试图将它存储到unsigned int:

unsigned int key=000001111110001;

但它没有,所以请帮助我。

2 个答案:

答案 0 :(得分:8)

通常,这些位一次分解为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)

Fancier宏技巧可以帮助您以更加自动化的方式实现。请参阅示例P99

答案 1 :(得分:3)

如果您的编译器支持它(请参阅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)个字节(至少对于相同的字节序)。