Server/C++
연산자 (Operator)
Juzdalua
2024. 7. 20. 14:32
- CPU에서 연산을 진행한다.
- 연산이 종료되면 CPU 내부 레지스터 메모리에 임시로 값을 저장한다.
- 결과값을 받을 변수가 없고, 다음 연산이 진행되면 이전에 진행되었던 연산 결과는 사라지고 새로운 결과값이 레지스터 메모리에 저장된다.
비트연산자
* 쉬프트 ( << , >> )
비트를 방향으로 1비트씩 이동시킨다.
char a = 1; // 0000 0001
a = a << 1; // 0000 0010 => a <<= 1;
이진법에서 왼쪽으로 1비트 이동하면 십진수 값으로 기존 값의 2^1배가 된다.
char b = 10; // 0000 1010
b <<= 3; // // 0101 0000 => b = 80
이진법에서 오른쪽으로 1비트 이동하면 십진수 값으로 기존 값의 2^1으로 나눈 몫이 된다.
오른쪽으로 넘어가 저장공간을 벗어난 비트는 사라지므로 나머지는 없어진다.
* AND( & ), OR( | ), XOR( ^ ), NOT( ~ )
// & : 대응하는 비트가 모두 1일 경우에 1을 반환
0000 0110
0000 0101
=> 0000 0100
// | : 대응하는 비트 중 하나라도 1일 경우 1을 반환
0000 0110
0000 0101
=> 0000 1011
// ^ : 같으면 0, 다르면 1 반환
0000 0110
0000 0101
=> 0000 0011
// ~ : 0은 1로, 1은 0으로 반전
0000 0110
=> 1111 1001
비트는 상태를 표현할 수 있다.
0000 0001 => 피격 중인 상태 <-> int a = 1;
0000 0010 => 달리는 중인 상태 <-> int a = 2;
0000 0100 => 쓰러진 상태 <-> int a = 4;
0000 1000 => 공격 중인 상태 <-> int a = 8;
unsigned int status;
status = 3; // 0000 0011 => 피격중이고 달리는 상태
status |= 4 // 0000 0111 => 피격 + 달리는 + 쓰러진 상태
// 현재 달리는 상태면 0이 아닌 참을 반환
int isSprint = 2;
if( status & isSprint ) {
0000 0111
0000 0010
-> 0000 0010 => 2
}
// 특정 위치의 비트 제거
status &= ~isSprint
0000 0111
1111 1101
-> 0000 0101 => isSprint 제거