비트 연산은 정수 값을 이진수(0과 1)의 조합으로 보고, 이 비트들을 직접 조작하는 연산입니다. Unity에서 레이어 마스크 처리, 플래그 체크, 퍼포먼스 최적화 등에 자주 사용됩니다.
✅ 1. 주요 비트 연산자
연산자이름설명
& | AND | 두 비트가 모두 1이면 1 |
` | ` | OR |
^ | XOR | 서로 다르면 1 |
~ | NOT (반전) | 0 → 1, 1 → 0 |
<< | 왼쪽 쉬프트 | 비트를 왼쪽으로 밀기 (2의 제곱배 증가) |
>> | 오른쪽 쉬프트 | 비트를 오른쪽으로 밀기 (2로 나누기 효과) |
✅ 2. 예제: 기본 비트 연산
int a = 5; // 00000101
int b = 3; // 00000011
int and = a & b; // 00000001 => 1
int or = a | b; // 00000111 => 7
int xor = a ^ b; // 00000110 => 6
int not = ~a; // 11111010 => -6 (2의 보수법)
✅ 3. 예제: 레이어 마스크 활용
int playerLayer = 8;
int enemyLayer = 9;
// 특정 레이어만 허용
int layerMask = (1 << playerLayer) | (1 << enemyLayer);
// == 1 << 8 | 1 << 9 => 256 | 512 => 768
int objLayer = other.gameObject.layer;
if ((layerMask & (1 << objLayer)) != 0)
{
// 이 오브젝트는 player 또는 enemy 레이어이다
}
✅ 4. 쉬프트 연산으로 빠르게 2의 거듭제곱 계산
int value = 1 << 4; // 2^4 = 16
int value2 = 1 << 10; // 2^10 = 1024
✅ 5. Unity에서 LayerMask 예시
[SerializeField] private LayerMask groundMask;
void OnTriggerEnter(Collider other)
{
int otherMask = 1 << other.gameObject.layer;
if ((groundMask.value & otherMask) != 0)
{
Debug.Log("접촉한 물체는 groundMask에 포함됩니다.");
}
}
🎯 요약
목적방법
특정 레이어만 감지 | layerMask & (1 << obj.layer) |
여러 레이어 OR | `1 << layer1 |
비트 조합 체크 | if ((mask & flag) != 0) |