게임 아이템이 붙은 옵션 또는 속성 값을 bool로 사용하면 된다가 보통의 생각이다.

bool을 sizeof로 측정하면 1Byte = 8bit 값이 나오는데 필요한건 1bit를 표현하기 위해 사용하고 있는 값은 1Byte인것이다. 7bit는 낭비로 보이게 마련이다. 이와 같은 경우 선배님들의 해결법은 바로 비트 연산을 이용하는 것이다.


예를 들어 "NPC에게 판매불가, 버리기 불가, 거래 불가" 등등의 속성들 설정할 때 사용한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
 
typedef unsigned int UINT;
 
// 시프트 연산을 이용하여 해당하는 자리에 비트를 넣어준다.
enum ITEM_ATTRIBUTE
{
    SELL_SHOP    = 1 << 0, // 상점 판매 유무
    THROW_OUT    = 1 << 1, // 버리기 유무
    ITEM_ATTRIBUTE_MAX    = 1 << 32,
};
 
int main()
{
    UINT itemAttr = SELL_SHOP;
    std::cout << static_cast<UINT>(itemAttr & SELL_SHOP) << std::endl;
    std::cout << static_cast<UINT>(itemAttr & THROW_OUT) << std::endl;
 
    UINT itemAttr = SELL_SHOP | THROW_OUT;
    std::cout << static_cast<UINT>(itemAttr & SELL_SHOP) << std::endl;
    std::cout << static_cast<UINT>(itemAttr & THROW_OUT) << std::endl;
    return 0;
}
cs

(itemAttr & SELL_SHOP)으로 확인하면 해당 비트가 1의 상태면 0보다 큰 숫자를 반환하고 

비트가 0의 상태면 0을 반환한다.

+ Recent posts