소프트웨어/C# & ASP.NET

[C#] Flag 연산 총정리

falconer 2008. 8. 11. 18:27

C#의 Enum 타입에 대해 공부하려고 Enum values as bit flags - using FlagsAttribute을 읽다가 본문이 아닌 댓글에서 쓸만한 정보를 찾았다. Jeremy Lundy라는 사람이 Flag 연산에 대해 잘 정리해놨다.

  1. [Flags]  
  2. public enum Column  
  3. {  
  4.     None = 0,  
  5.     Priority = 1 << 0,  
  6.     Customer = 1 << 1,  
  7.     Contract = 1 << 2,  
  8.     Description = 1 << 3,  
  9.     Tech = 1 << 4,  
  10.     Created = 1 << 5,  
  11.     Scheduled = 1 << 6,  
  12.     DueDate = 1 << 7,  
  13.     All = int.MaxValue  
  14. };  

[Flags] 애트리뷰트를 쓰면 이런 게 된다.

Column MyColumns = Column.Customer | Column.Contract;

Flag 값을 확인하려면:

if((MyColumns & Column.Customer) != 0)

특정 Flag 값을 주려면:

MyColumns |= Column.Tech;

특정 Flag 값을 제거하려면:

MyColumns &= ~Column.Tech;

특정 Flag 값을 반전시키려면:

MyColumns ^= Column.Contract;

Flag 값을 모두 제거하려면:

MyColumns = Column.None;

모든 Flag 값을 적용하려면:

MyColumns = Column.All;

한두 개의 Flag 값을 제외하고 전부 적용하려면:

MyColumns = Column.All ^ Column.Tech ^ Column.Status;

출처 : http://kaistizen.net/EE/index.php/weblog/comments/csharp_flag_operations/