비트연산 : 비트단위의 조작이 필요할 때 사용된다. 대표적으로 BitFlag가 있다.
비트연산의 종류
~ (bitwise not ) : 모든 종류의 비트를 뒤집음
& (bitwise and) : 모든 비트 쌍을 대상으로 and 연산을 실행
| (bitwise or) : 모든 비트 쌍을 대상으로 or 연산을 실행
^ (bitwise xor) : 모든 비트 쌍을 대상으로 xor 연산을 실행
-> xor 연산은 두 번 실행하면 원래의 숫자로 돌아오게 되어 암호학에서 쓰인다.
<< 비트 좌측 이동 : N만큼 왼쪽으로 이동, 왼쪽에 넘치는 건 버리고, 새로 생성되는 건 0으로 생김.
ex) 1바이트 짜리 0100 1010 이 있다고 하자. 이 숫자에 << 4 연산을 실행하면 4비트를 왼쪽으로 민다.
따라서 1010 0000 이 된다.
>> 비트 우측 이동 : N만큼 우측으로 이동, 오른쪽에 넘치는 건 버린다. 이 연산은 부호비트가 있으면 부호비트는 따르고 나머지 새로운 비트를 0으로 만들고 unsigned 같은 타입의 부호비트가 없는 숫자면 맨 처음 비트도 0으로 만든다.
ex) 1바이트 짜리 1101 0101 >>4 연산을 실행할 때,
-> signed int 면 1000 0101 이 되고
-> unsigned int 면 0000 1101 이 된다.
BitFlag
실제로 사용되는 예시를 보면 게임에서의 상태표현에 유용하게 사용된다.
ex) 4가지 상태가 있다고 하자. [무적][변이][스턴][저지불가]
bool 변수 4개를 이용해도 되지만 bitflag를 이용하면 쉽게 처리할 수 있다.
무적상태는 1바이트 안에서 0000 1000 이렇게 4번째 비트를 1로 만드는 방식으로 처리한다고 하자.
-> 무적 만들기 : flag = ( 1 << 3 )
-> 변이 상태를 추가 : flag = ( 1 << 2 )
이런 식으로 상태를 표현할 수 있다.
그리고 특정 상태인지 확인할 때는 BitMask를 사용한다.
BitMask
특정한 비트를 확인할 때 사용되는 기술이라고 이해했다.
특정비트를 제외한 다른 비트는 신경쓰지 않는다고 해서 Mask가 붙여졌다고 들었다.
ex) 무적인지 확인하려고 할 때
-> flag & ( 1 << 3 ) : 이 값이 1 이면 무적이 켜진 것으로 본다.
&연산은 두 개의 비트가 모두 1이어야만 결과값이 1이 된다.
1 << 3 은 1000 이 되고 flag에 무적과 변이 상태라고 한다면 1100 일 것이다.
현재 flag에 어떤 상태가 켜져있든 1 << 3 을 & 연산 함으로써 상관없이 전부 0이 되고
오로지 4번째 비트가 1 이냐 0 이냐에 따라 결과가 출력된다.
'개발 지식' 카테고리의 다른 글
테스트에 관한 짧은 글 (0) | 2024.08.07 |
---|---|
게임에서의 내적 (0) | 2024.07.29 |
정규표현식과 예제문제 (2) | 2024.07.23 |
Git 협업을 위한 Branch 정리 (1) | 2024.02.27 |
코드 디버깅(debugging) (1) | 2023.07.19 |