[C#] Flag 연산 총정리

  • Post author:
  • Post category:
  • Post comments:4 Comments
  • Post last modified:August 8, 2008

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

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

[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;

This Post Has 4 Comments

  1. daybreaker

    오호, 저런 식으로 비트연산 플래그 정의하는 것도 재밌네요.

  2. 최재훈

    유명한 블로그는 재밌는 게 본문보다 댓글이 더 길고 쓸만할 때가 많다는 것이죠. 예전에 CodeHorror의 글을 프린트한 적이 있는데, 댓글만 20쪽! 미리보기를 안 해봤더니 종이가 줄줄이 나오더군요. 큭.

  3. Gungume

    유용한 글 잘봤습니다.
    해당 내용으로 인해 원하는 것을 해결하게 되었네요 ^^

  4. 최재훈

    저는 외우는 걸 싫어해서 이렇게 정리해놓고 매번 제 글을 참조합니다. cheese

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.