[Flags]
public enum EyeColors
{
None = 0,
Blue = 1 << 0,
Cyan = 1 << 1,
Brown = 1 << 2,
Black = 1 << 3,
Green = 1 << 4,
Browngreen = 2 | 4
// Browngreen = Brown | Green
}
바이너리 OR on [플래그] 열거 요소 - 플래그를 단순히 추가해도 안되는 이유는 무엇입니까?
Browngreen = 2 | 4
Browngreen = Brown | Green
이
Browngreen = 6
작동 않지만하지 않습니다. Browngreen은이 날 퍼즐 6.
로 설정되어 wheren
EyeColors.Browngreen == (EyeColors.Brown | EyeColors.Green);
같은 시험의 평가는 경우에 false로 평가합니다.
0100 : 2
0110 : 4
0010 방법은 내가 있도록 바이너리 또는 플래그 비트가 추가됩니다 것을 이해했을 때 6
그래서 왜 작동하지 않습니다 단지 세트?
Browngreen = 6;
1 << 3 (** 8 **) 갈색인가, 아니면 어떻게 든 4 갈색 (1 << 2 인, 당신의 열거가 아닌) : 여기
는 작업 예제? – oerkelens
'&'와'| '가 같은 방식으로 작동하는 이유는 무엇입니까? 2 및 4 = 0 인 반면, 2 | 4 = 6이다. – oerkelens
'Browngreen = 2 & 4'는 올바르게 동작하지 않을 것입니다. ('2 & 4'는 'Brown | Green'과 같이'0' ... 실제로'2 | 4'를 원합니다). 문제를 재현하는 실제 [mcve]와 함께 질문을 게시해야합니다. 지금까지 작성한 내용을 토대로 스택 오버플로 커뮤니티 나 코퍼스를 사용하지 않는 간단한 입력 오류가 발생합니다. 테스트를'EyeColors.Brown | EyeColors.Green'; 'Browngreen = 2 & 4'를 설정했을 때를 제외하고는 현재 가지고있는 것은 실패 할 것입니다. –