핵심 정리
비트 연산자
비트 연산자는 값을 비트 단위로 연산합니다.
연산자 | 설명 |
---|---|
& | 비트 AND |
| | 비트 OR |
^ | 비트 XOR (배타적 OR, Exclusive OR) |
~ | 비트 NOT |
<< | 비트를 왼쪽으로 시프트 |
>> | 비트를 오른쪽으로 시프트 |
&= | 비트 AND 연산 후 할당 |
|= | 비트 OR 연산 후 할당 |
^= | 비트 XOR 연산 후 할당 |
<<= | 비트를 왼쪽으로 시프트한 후 할당 |
>>= | 비트를 오른쪽으로 시프트한 후 할당 |
부호 있는 자료형의 비트 연산
부호 있는 자료형의 비트를 오른쪽으로 이동시키면 모자라는 공간은 부호 비트의 값으로 채워집니다. 그리고 비트를 왼쪽으로 이동시키면 부호 비트를 덮어쓰게 되므로 부호가 바뀔 수 있습니다.
1000 0000 (-128) _________ >> 2 1110 0000 (-32)
0010 0000 (32) _________ << 2 1000 0000 (-128)
비트 연산자로 플래그 처리하기
플래그의 비트를 조작하거나 검사할 때 사용하는 숫자를 마스크(mask)라고 부릅니다.
연산 방법 | 설명 |
---|---|
flag |= mask | 플래그의 특정 비트를 켬 |
flag &= ~mask | 플래그의 특정 비트를 끔 |
flag ^= mask | 플래그의 특정 비트를 토글시킴 |
flag & mask | 플래그의 특정 비트가 켜져 있는지 검사 |
연산자 우선순위
각 연산자는 우선순위가 있으며 우선순위가 높은 순서대로 계산됩니다.
우선순위 | 연산자 | 설명 | 결합 법칙(방향) |
---|---|---|---|
1 |
x++ x-- ( ) [ ] . -> (자료형){값} |
증가 연산자(뒤, 후위) 감소 연산자(뒤, 후위) 함수 호출 배열 첨자 구조체/공용체 멤버 접근 포인터로 구조체/공용체 멤버 접근 복합 리터럴 |
→ |
2 |
++x --x +x -x ! ~ (자료형) *x &x sizeof |
증가 연산자(앞, 전위) 감소 연산자(앞, 전위) 단항 덧셈(양의 부호) 단항 뺄셈(음의 부호) 논리 NOT 비트 NOT 자료형 캐스팅(자료형 변환) 포인터 x 역참조 x의 주소 자료형의 크기 |
← |
3 |
* / % |
곱셈 나눗셈 나머지 |
→ |
4 |
+ - |
덧셈 뺄셈 |
→ |
5 |
<< >> |
비트를 왼쪽으로 시프트 비트를 오른쪽으로 시프트 |
→ |
6 |
< <= > >= |
작음 작거나 같음 큼 크거나 같음 |
→ |
7 |
== != |
같음 다름 |
→ |
8 | & | 비트 AND | → |
9 | ^ | 비트 XOR | → |
10 | | | 비트 OR | → |
11 | && | 논리 AND | → |
12 | || | 논리 OR | → |
13 | ? : | 삼항 연산자 | ← |
14 |
= += -= *= /= %= <<= >>= &= ^= |= |
할당 덧셈 후 할당 뺄셈 후 할당 곱셈 후 할당 나눗셈 후 할당 나머지 연산 후 할당 비트를 왼쪽으로 시프트한 후 할당 비트를 오른쪽으로 시프트한 후 할당 비트 AND 연산 후 할당 비트 XOR 연산 후 할당 비트 OR 연산 후 할당 |
← |
15 | , | 쉼표(콤마) 연산자 | → |
연산자 우선순위와 괄호
우선순위가 낮은 연산자를 먼저 계산할 때는 괄호로 묶어줍니다.
num1 = (35 + 1) * 2; // 괄호를 사용하여 35 + 1을 먼저 계산한 뒤 2를 곱함