C:如何建立二进制整数

时间:2011-12-11 23:29:07

标签: c

我有一些逻辑,我想存储为整数。我有30个“位置”,可以是是或否,我想将其表示为整数。当我循环遍历这些位置时,将这些信息存储为整数的最简单方法是什么?

4 个答案:

答案 0 :(得分:3)

struct{
    int flag0:1;
    int flag1:1;
    ...
    int flag31:1;
} myFlags;

在整数:x成员的定义中使用struct表示分配了x位的位域。

您可以像往常一样访问每个结构成员,但值只能根据位的大小(在我的示例中 - 1或0,因为只有1位可用),编译器将强制执行它。结构将(可能取决于编译器设置)打包到表示总位数所需的整数总大小。

另一种选择是使用int和按位运算符&|来访问特定位。在这种情况下,你必须确保自己设置一个位不会影响另一个,并且没有溢出等。

答案 1 :(得分:3)

您可以使用32位uint:

uint32_t flags = 0;
flags |= UINT32_C(1) << x; // set x'th bit from right
flags &= ~(UINT32_C(1) << x); // unset x'th bit from right
if (flags & UINT32_C(1) << x) // test x'th bit from right

答案 2 :(得分:1)

 #define POSITION_A 1
 #define POSITION_B 2

 unsigned int position = 0;
 // set a position
 position |= POSITION_A;
 // clear a position
 position &= = ~(POSITION_A);

答案 3 :(得分:0)

是的,作为WTP的评论,您可以将所有数据保存在一个unsigned int(uint32_t)中,并使用AND(&amp;),OR(|),NOT(〜)访问它。

但是,如果保存存储不是主要问题,我建议不要使用这种紧凑的技术。

  1. 您可能需要扩展代码以支持超过2种类型(是/否)的答案,例如(是/否/可能)。
  2. 您可能有超过30个不符合一个unsigned int的问题。
  3. 如果我是你,我将使用一些小型int(short或char)的数组/列表来存储值。这有点浪费存储,但更容易阅读,更容易添加更多功能。