【发布时间】:2017-08-08 01:16:27
【问题描述】:
对于在 C++ 中使用 DWORD 代替布尔值,我真的很陌生。因此,请原谅我的问题。
我有一个enum:
enum foo
{
foo1 = 0x0;
foo2 = 0x1
//....
}
DWORD foo;
我正在使用这个enum 来检查多个条件:
if(somethinghappenstothisvariable)
{
foo|= foo1;
}
if(somethinghappenstosecondvariable)
{
foo|=foo2;
}
现在在另一个文件中,我必须检查单个变量的条件
if(foo &foo1)
{
//do something;
}
if(foo & foo2)
{
//do something;
}
我认为 |= 将值加到 DWORD 如果两个条件都是 true 导致 foo & foo2 只为真,而 foo & foo1 不会是 DWORD 的值是1。因此,我想知道是否有任何方法可以检查单个 DWORD 值。
【问题讨论】:
-
foo|= foo1; ==> foo|= 0 == foo, and foo & foo1 == foo & 0 ==> 0, 我猜你想要 foo1 = 0x1(2^0), foo2 = 0x2(2^1), foo3 = 0x4 (2^2)...
-
是的,foo1 在您当前的实现中为零。最低的实际位是值“1”而不是“0”。 “0”不匹配任何位。每个位值也需要是之前的两倍。
-
谢谢,成功了。
-
请注意,如果
foo1、foo2等是位移指示符(即用作foo |= 1 << foo1而不是foo |= foo1),则foo1应为0。我相信我已经看到了这两个版本。我个人更喜欢前者,其中fooN是位的值而不是它的数字,因为它更容易定义和使用“清除所有”和“设置所有”标志。 Here's 我的意思的一个简单例子。 -
对枚举类型和变量名都使用
foo是个坏主意。