可以位掩码比 int 可以容纳的更多的值吗?
Possible to bitmask more values than an int can hold?
我有 36 个相互关联的 Bool 标志。有没有办法枚举这个,或者数组/其他东西是我唯一的选择?
起初我尝试为此使用位掩码枚举,但我意识到这些会溢出枚举大小并给我带来不好的结果。
我不需要像选项掩码一样组合这些(它们彼此独立),只需分组即可。
谢谢!
如果我理解你的问题,那么以下方法可能有效:
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);
}
在 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;
我有 36 个相互关联的 Bool 标志。有没有办法枚举这个,或者数组/其他东西是我唯一的选择?
起初我尝试为此使用位掩码枚举,但我意识到这些会溢出枚举大小并给我带来不好的结果。
我不需要像选项掩码一样组合这些(它们彼此独立),只需分组即可。
谢谢!
如果我理解你的问题,那么以下方法可能有效:
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);
}
在 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;