2017-03-16 2 views
2

나는 부울 대신 C++에서 DWORD을 사용하는 것이 처음입니다. 그러므로 제 질문을 용서하십시오. C++에서 dword를 사용하여 여러 부울 조건 확인

내가 가진 enum : 나는 여러 조건을 확인하기 위해이 enum을 사용하고

enum foo 
{ 
    foo1 = 0x0; 
    foo2 = 0x1 
    //.... 
} 
DWORD foo; 

: 나는 개별 변수의 상태를 확인해야 할 다른 파일에 이제

if(somethinghappenstothisvariable) 
{ 
    foo|= foo1; 
} 

if(somethinghappenstosecondvariable) 
{ 
foo|=foo2; 
} 

if(foo &foo1) 
{ 
    //do something; 
} 

if(foo & foo2) 
{ 
//do something; 
} 

내가 생각한 바 : |=은 두 조건이 모두 true 인 경우 이의 값이 아니기 때문에 foo & foo2이 참이되는 경우에만 DWORD에 값을 더합니다. 1이됩니다. 그러므로 나는 어쨌든 나는 이것을 개인 DWORD 값으로 확인할 수 있는지 궁금하게 생각하고 있었다.

+2

foo | = foo1; == foo1 == foo1 == foo & 0 ==> 0, foo1 = 0x1 (2^0), foo2 = 0x2 (2^1), foo3 = 0x4 (2^2) ... – willll

+0

예, 현재 구현에서 foo1은 0입니다. 최저 실제 비트는 "0"이 아닌 값 "1"입니다. "0"은 비트와 일치하지 않습니다. 각 비트 값은 전에 두 배가되어야합니다. –

+0

고마워, 효과가 있었다. – user1435077

답변

1

문제는 1 = 비트 0, 0은 유효하지 않습니다. 각 "조건"이 별도의 비트 (비트 0 = 1, 비트 1 = 2 등)를 나타냄을 확인하십시오. 간단한 변경 : foo1 = 0x01; foo2 = 0x02;으로 수정해야합니다. 참고 : 추가 검사는 순서가 아닌 비트 값을 나타내야합니다. 즉 , foo3 = 0x04; (안 0x03;)

0

당신은 변화와 이러한 상수를 생성하여 올바른 쉽게 만들 수 있습니다

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

각 마스크는 하나의 비트가 설정되어 있는지 확인 할 수 있습니다 이쪽으로.