可以比int可以保存更多的值吗?

时间:2015-02-11 16:52:30

标签: objective-c c arrays enums

我有36个Bool标志彼此相关。有没有办法来枚举这个,或者是数组/其他东西我唯一的选择?

起初我尝试使用位掩码枚举,但我意识到这些都溢出了Enum大小并给我不好的结果。

我不需要将它们组合成一个选项掩码(它们彼此独立),只需要组合。

谢谢!

2 个答案:

答案 0 :(得分:0)

在C中,枚举基本上只不过是一个int;因此,枚举限于整数的最大大小。 如果您想拥有任意数量的标志,可以使用位域:

struct flags {
    unsigned f0 :1;
    unsigned f1 :1;
    unsigned f2 :1;
    unsigned f3 :1;
    unsigned f4 :1;
    unsigned f5 :1;
    unsigned f6 :1;
    unsigned f7 :1;


    ...

    unsigned f35 :1;
};

struct flags f;

f.f33 = 1;
f.f14 = 0;

答案 1 :(得分:-1)

如果我理解你的问题,那么以下内容可能会有效:

enum flags
{
  .. 36 appropriatly named entries
};

long long int myFlags = 0LL;

int getFlag( enum flags whichFlag )
{
    return( (myFlags&(1<<whichFlag)? 1:0 );
}

void setFlag( enum flags whichFlag )
{
    myFlags |= (1<<whichFlag);
}