2009-09-15 4 views
1

나는 사용 권한을 나타내는 데 사용하는 플래그 속성이있는 열거 형을 사용하고 있습니다. 나는 flagsattribute - 음수 값?

[FlagsAttribute] 
enum MyPermission 
{ 
    None = 0, 
    Permission1 = 1, 
    Permission2 = 2, 
    Permission3 = 4, 
    Permission4 = 8,... 
    .................. 
    and so on 

} 

그러나, 우리는 최대 한계에 도달 ... if (CurrentPermissions & Permission1 == Permission1) 등을 비교하는 데 사용합니다. 열거 형 값이 부족하면 -1, -2, -4 등의 음수 값을 사용할 수 있습니까?

+0

[C에서 부의 열거 형 # 음수를 사용하는 부작용] 가능한 복제본 (http://stackoverflow.com/questions/11881490/enumerations-in-c-sharp-negative-side-effects-of-using- a negative number) –

답변

1

FlagsAttribue는 열거 형을 비트 필드로 표시하기 때문에 음수를 사용하면 의미가 없습니다. (INT16에 대한) 이진 표현 봐 : 당신이 볼 수 있듯이, 부정적인 열거 값이 양의 값의 비트 조합으로 작동합니다

1 -> 0000000000000001b 
2 -> 0000000000000010b 
4 -> 0000000000000100b 

-1 -> 1111111111111111b 
-2 -> 1111111111111110b 
-4 -> 1111111111111100b 

. 열거 형 기반으로 int32를 사용하면 32 개의 고유 한 값만 사용할 수 있습니다. 따라서 열거 형의 기반으로 long (int64)을 사용하여 최대 64 개의 값이 있습니다.

이 숫자를 초과하면 다른 데이터 구조가 적합 할 수 있습니다. 예를 들어 열거 형 값 목록을 예로들 수 있습니다.

2

은 플래그 열거 형에서 원하는 값으로 항목을 정의 할 수 있습니다. 두 가지 일반적인 것들 제로 0xffffffff로 (-1)이이 "모든 옵션을 사용할 수 없습니다"와 값 "사용할 수있는 모든 옵션", 예를 들어

enum DrawingOptions 
{ 
    None   = 0, 

    DrawLines = 1 << 0, 
    FillShapes = 1 << 1, 
    Antialias = 1 << 2, 

    BestQuality = 0xffffffff 
} 

(새 옵션을 추가 할 경우, 어떤을 대표하는 유용한 값이 될 수 있기 때문에 것 "BestQuality"를 활성화 한 코드는 자동으로 해당 옵션을 활성화하므로 코드를 검색하여 모든 것을 업데이트 할 필요가 없습니다.

그러나 -1 이외의 음수는 매우 유용하지는 않습니다. 프랭크 Bollack 이미 대답했다.

열거 형 (바이트, int32, int64)의 크기가 변경되면 음수에주의해야 할 수도 있습니다.

+0

이것이 더 오래된 질문이라는 것을 알고, 나는 여전히 추가 할 것이다. 같은 것을하는 다음과 같은 것을 볼 수있다 :'Enum DrawingOptions {All = ~ 0, None = 0, DrawLines = 1 << 0, FillShapes = 1 << 1, AntiAlias ​​= 1 << 2}' – Machtyn