비트연산 대해 배운것 + C# enum flags
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | [System.Flags] public enum Attachable { None = 0, Muzzle = 1 << 0, Scope = 1 << 1, HandGuard = 1 << 2, Magazine = 1 << 3, Stock = 1 << 4, Everything = ~0, HandGun = Muzzle | Scope | Magazine } | cs |
ray쓸때 필요한 지식
비트 연산자
이항 연산자
& = 'AND' 예) A와 B 모두가 true면 true
| = 'OR' 예) A와 B 중 하나라도 true면 true.
^ = 'XOR' 예) A ^ B = A와 B가 서로 다른 값일 때 true
단항 연산자
~ = 값을 뒤집는 연산자.
! = 0인 값을 1로, 0이 아닌 모든 값을 0으로 만들어준다.
Shift 연산자
<< = 비트값을 왼쪽으로 이동시킨다.
>> = 비트값을 오른쪽으로 이동시킨다.
예)
1 << 2 = 4.
1의 비트값을 0001.
이것을 왼쪽으로 2번 이동하면 0100, 즉 4가 된다.
비워진 값은 0으로 변환한다.
8 >> 2 = 2.
8의 비트값은 1000.
오른쪽으로 2번 이동하면 0010, 즉 2가 된다.
비워진 값이 양수면 0, 음수면 1로 변환한다.
활용하는 방법
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | void Test() { Attachable temp = Attachable.None; // 모든 값 빼기 temp = Attachable.Everything; // 모든 값 넣기 // 연산자 temp &= ~Attachable.HandGun; // 기존 값 빼기 => Handguard,Stock temp |= Attachable.Scope; // 기존 값 넣기 => Handguard,Stock,Scope temp ^= Attachable.HandGun; // 값 반전 => Handguard,Stock temp = Attachable.Everything ^ Attachable.Muzzle ^ Attachable.Scope; // 값 제외 => Handguard,Stock,Magazine // 값 확인 Attachable withoutScope = Attachable.Everything ^ Attachable.Scope; if ((temp & withoutScope) != 0) ; // temp에 withoutScope가 있으면 True if ((temp & withoutScope) == 0) ; // temp에 withoutScope가 없으면 True if (temp.HasFlag(withoutScope)) ; // net 4.0 이상, temp에 withoutScope가 있으면 True } | cs |
댓글
댓글 쓰기