在 c++ 中使用 dword 检查多个布尔条件

Check Multiple boolean condition using dword in c++

本文关键字:布尔 条件 检查 dword c++      更新时间:2023-10-16

我真的很陌生,在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;
}

我认为,如果两个条件都true|= DWORD的值相加,这导致foo & foo2只为真,而foo & foo1则不会,因为DWORD的值将1。因此,我想知道是否有任何我可以检查个人DWORD值。

问题:1 = 位 0,0 无效。检查每个"条件"应代表一个单独的位(位 0 = 1,位 1 = 2,等等(

所以 - 一个简单的更改:foo1 = 0x01; foo2 = 0x02;应该修复它。注意:任何其他检查都应表示位值,而不是序号。换句话说,foo3 = 0x04;(不是0x03;(

您可以通过创建具有移位的这些常量来使其更容易更正:

enum foo
{
  foo1 = 1 << 0;
  foo2 = 1 << 1;
  foo3 = 1 << 2;
  //....
}

这样,您可以确保每个掩码都设置了一个位。