비트 연산은 한 개 혹은 두 개의 이진수에 대해 비트 단위로 적용되는 연산이다.
& 둘다 1 이면 1 | 둘중 하나라도 1이면 1 -> 해당 부분 비트 1로 킴 이미 1이면 건들 x ^ 같으면 0, 다르면 1 ~ 1을 0으로, 0 을 1로 변환
비트 연산은 기본적으로 비트를 통해 위치를 찾아간다. (1,2,4,8,16,32 ..)
Short, Char과 같이 적은 비트를 가진다면 큰 문제가 없다면 비트 수가 많아지면 계산하기 복잡해지고 팀내 작업간 해당 비트가 어떤걸 의미하는지 알 수 없어 차질이 생길 수 있다.
이 문제를 해결하기 위해 지시문(Define)을 사용한다.
//예시
#define ATT_UP 0x1
#define DEF_UP 0x2
#define DEX_UP 0x4
#define AGI_UP 0x8
#define FIRED 0x10
#define ICED 0x20
#define POISION 0x40
#define BLEED 0x80
//한번에 여러 지시문을 사용하고 싶으면 묶어서 다시 정의해준다.
#define HOLLY (ATT_UP | DEF_UP | DEX_UP)
State |= ATT_UP;
State |= HOLLY;
if (State & ICED)
{
printf("동상상태이다.");
}
// 특정 자리 비트 제거
State &= ~ICED;
State &= ~ICED;는 State의 특정 비트만을 0으로 설정하는 반면,
State = ~ICED;는 State를 ~ICED 값으로 완전히 덮어씌웁니다.