: 연산 명령을 수행시킬 수 있는 것
✔️ 연산자 우선순위(Operator Priority)

=: 숫자 표현식의 음수 또는 양수 값을 반환한다. 피연산자를 하나만 취한다.

: 연산자 왼쪽과 오른쪽에 피연산자를 취한다.

✔️ 정수와 부동 소수점 숫자 나눗셈
-> 두 피연산자 중 하나 이상이 부동 소수점 숫자면/연산자는 부동 소수점 나누기를 수행한다.
(Ex. 7.0/3=2.333, 7/3.0=2.333, 7.0/3.0=2.333)
: 나눗셈의 나머지를 구하는 연산 (Ex) %)
: 정수 피연산자에서만 작동하며 정수 나눗셈을 수행 후 나머지를 반환한다.
: 산술을 간결하게 하도록 도와준다.

: C++에서는 전위(prefix), 후위(postfix)버전의 두 가지 연산이 있다.

: 증가 또는 감소한 다음 값 평가
int x = 5;
int y = ++x; //x=6 / y=6
: 컴파일러는 x의 임시 복사본을 만든후, 원본 x를 증가 또는 감소시킨 다음 x의 임시 복사본을 평가한다. 이후 x의 임시 복사본이 삭제 된다.
int x = 5;
int y = x++; //x=5 / y=6
-> 컴파일러는 x와 같은 값을 가진 임시 복사본 x(5) 를 만든다.
-> 원본 x를 5에서 6으로 증가시킨다.
-> 컴파일러가 5로 평가되는 임시 복사본 x값을 y에 할당한다.
-> 임시 복사본이 삭제된다.
✔️ 전위 증감 연산자를 사용하는 것이 후위 증감 연산자를 사용하는 것보다 성능이 더 좋다!
-> 후위 증감 연산자로 사용하는 경우, 연산자 우선순위가 가장 나중으로 밀린다.
: 여러 조건을 테스트할 수 있는 기능을 제공한다.

: 논리 부정 연산자(!)는 부울(bool) 값을 반전시킨다.
-> 피연산자 true를 평가하면 false / false를 평가하면 true

✔️ 우선순위가 매우 높으므로 주의해서 사용해야 한다!
//x==y가 아니라면 "x does not equal y"값이 출력되어야 함 //옳지 못한 방법 -> 출력 값 : x equals y int x = 5; int y = 7; if (! x == y) cout << "x does not equal y"; else cout << "x equals y"; / / //올바른 방법 -> 출력 값 : x does not equal y int x = 5; int y = 7; if (!(x == y)) cout << "x does not equal y"; else cout << "x equals y";
: 두 조건 중 하나가 참(true)인지 테스트하는 데 사용한다.

: 두 조건이 모두 참(true)인지 테스트하는 데 사용한다.

: 해당 변수의 크기를 반환한다.

: C++의 유일한 삼항 연산자(피연산자가 3개)이므로 삼항 연산자라고도 부른다.
?: 연산자 : if-else 문을 더 간결하게 사용하는 방법 제공 / 우선순위가 매우 낮다.
//일반적인 if-else
if (condition)
expression;
else
other_expression;
//?: 연산자 사용
(condition) ? expression : other_expression;
//if-else
if (x > y)
larger = x;
else
larger = y;
//?:
larger = (x > y) ? x : y;
✔️ 출력하는 코드를 짜고 싶다면 <<연산자가 ?:연산자보다 우선순위가 높으므로 ()를 써야한다!
//if-else f (x > y) std::cout << x; else std::cout << y; //?: std::cout << ((x > y) ? x : y);
: 각 연산자는 부울 값(bool value) true(1) 또는 false(0)를 반환한다.

✔️ 부동 소수점 숫자 비교
-> 부동 소수점 숫자의 반올림 오류 때문에 관계 연산자를 사용해서 비교하는 것은 위험하다.
->==또는!=를 사용하는 것은 권장하지 않는다.
: 변수 내의 비트(bit)를 조작한다.

✔️ 왼쪽 시프트 연산자(<<): 각 비트를 왼쪽으로 이동시킨다.
3 = 0011
3 << 1 = 0110 = 6
3 << 2 = 1100 = 12
3 << 3 = 1000 = 8
3 << 1은 리터럴 3의 비트를 왼쪽으로 1자리 이동시킨다.3 << 3 경우에, 이동한 비트가 왼쪽 끝 범위를 넘어간다. (이진수의 끝에서 벗어난 비트는 손실된다.)✔️ 오른쪽 시프트 연산자(>>): 각 비트를 오른쪽으로 이동시킨다.
12 = 1100
12 >> 1 = 0110 = 6
12 >> 2 = 0011 = 3
12 >> 3 = 0001 = 1
12 << 3 경우에, 이동한 비트가 오른쪽 끝 범위를 넘어간다. (이진수의 끝에서 벗어난 비트는 손실된다.)✔️ 변수도 시프트할 수 있다!
unsigned int x = 4; x = x << 1; // x will be 8
~) : 비트 단위 연산자 중 가장 이해하기 쉽다.//4bits
4 = 0100
~4 = 1011 = 11 (decimal)
//8bits
4 = 0000 0100
~4 = 1111 1011 = 251 (decimal)
&), 비트 OR 연산자(|) : 논리 AND 연산자(&&) 및 논리 OR 연산자(||)와 비슷하게 동작한다.|) : 비트 두개 중 하나 이상이 1이면 1로 평가된다.//5 | 6: 0111(7)
0 1 0 1 // 5
0 1 1 0 // 6
-------
0 1 1 1 // 7
&) : 두 비트 모두 1인 경우에만 1로 평가된다. //5 & 6: 0100(4)
0 1 0 1 // 5
0 1 1 0 // 6
--------
0 1 0 0 // 4
^) : 두 연산자를 평가할 때, 한 개의 피연산자만 1인 경우에만 1로 평가된다. (같으면 0, 다르면 1)//5 ^ 6: 0101(5)
0 1 1 0 // 6
0 0 1 1 // 3
-------
0 1 0 1 // 5
#define HUNGRY 1(0x1)
#define THIRSTY 2(0x2)
#define TIRED 4(0x4)
#define FIRE 8(0x8)
#define COLD 16(0x10)
#define POISON 32(0x20)
//이후부터는 (0x40,0x80,0x100,0x200...등)
unsigned int iStatus = 0;
//상태 추가
iStatus |= HUNGRY;
iStatus |= THIRSTY;
//상태 확인
if (iStatus & THIRSTY)
{
}
//특정 자리 비트 제거
iStatus &= ~THIRSTY;

📌 참고 : 소년코딩 블로그 | https://boycoding.tistory.com/158