카테고리 없음

[스파르타 ][TIL] 유니티 스파르타 7기 52일차 - 비트 연산

맏난거 2025. 4. 23. 23:22

비트 연산은 정수 값을 이진수(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)