그제 배웠던 연산자 강의의 연장선으로 오늘은 조금 더 다양한 연산자에 대해 배웁니다. 복합 대입 연산자, 조건 연산자, 비트 연산자 등등, 그리고 지금껏 배운 모든 연산자들의 우선순위를 한 눈에 파악해보며 익혀보도록 하겠습니다. 그럼 바로 정리 시작할게요!
복합 대입 연산자는 대입 연산자와 다른 연산자를 함께 사용합니다.
또한 뒤에서 나올 비트 연산자도 같이 쓸 수 있습니다.
복합 대입 연산자의 형태는 다음과 같습니다.
+=, -=, *=, /=, %=, <<=, >>=, >>>=, <<<=, &=, |=, ^=
복합 대입 연산자를 사용하면 좀 더 프로그램이 간결해질 수 있습니다. lvalue(왼쪽변수)와 rvalue(오른쪽변수)를 해당 연산자로 연산한 후 그 값을 lvalue(왼쪽변수)에 대입하게 됩니다.
int left = left + right;
int left += right;
예시로 들어보니 확실히 식이 간결해지지 않았나요?
조건 연산자는 삼항 연산자입니다.
조건식의 결과가 true(참)일 경우와 false(거짓)일 경우에 따라 다른 식이나 결과가 수행되는 연산자입니다.
제어문 중 조건문을 간단히 표현할 때 사용합니다.
조건 연산자의 형태는 다음과 같습니다.
( 조건식 ) ? 참일 때의 결과 : 거짓일 때의 결과 ;
ex) int num = ( 3>5 ) ? 10 : 20 ;
조건식이 참이면 참일 때의 결과
가, 거짓이면 거짓일 때의 결과
가 해당 변수에 대입됩니다. 예시에서는 조건식의 결과가 거짓이므로 변수 num
에 거짓일 때의 결과
인 20
이 대입되겠네요.
여기서 결과는 꼭 숫자가 아니어도 됩니다. 문장이 들어갈 수도 있습니다.
비트 연산자는 우리가 전에 배웠던 그 bit
의 비트입니다. 10진수가 아닌 2진수의 형태로 연산하는 것입니다. 따라서 비트 연산자는 정수에만 사용할 수 있습니다.
비트 연산자의 종류입니다.
~ (비트의 반전, 1의 보수)
: 비트 값을 0은 1로, 1은 0으로 반전하는 연산자int a;
a = ~a;
& (비트 단위 AND)
: 두 비트가 모두 1인 경우만 1, 아니면 0| (비트 단위 OR)
: 두 비트가 모두 0인 경우만 0, 아니면 1^ (비트 단위 XOR)
: 두 비트가 다른 값이면 1, 같은 값이면 0<< (왼쪽 shift)
: 비트를 오른쪽에서 왼쪽으로 이동시키는 연산자 (*2)int a = 1;
a << 2 (변수 a를 2비트만큼 오른쪽으로 이동)
a의 값 : 4
>> (오른쪽 shift)
: 비트를 왼쪽에서 오른쪽으로 이동시키는 연산자 (/2)int a = 8;
a >> 2 (변수 a를 2비트만큼 왼쪽으로 이동)
a의 값 : 2
>>> (오른쪽 shift)
: shift로 비트 이동은 동일하지만, 남은 공간을 무조건 부호비트가 아닌 0으로 채우는 연산자>>
와 동일한 연산이지만 채워지는 비트가 부호와 상관없이 0이다.비트 연산자를 사용할 때 쓰이는 용어들을 살펴보겠습니다.
마스크
: 특정 비트들은 가리고 몇 개의 비트들의 값만 사용할 때비트켜기
: 특정 비트들만을 1로 설정해서 사용하고 싶을 때비트끄기
: 특정 비트들만을 0으로 설정해서 사용하고 싶을 때비트토글
: 모든 비트들을 0은 1로, 1은 0으로 바꾸고 싶을 때연산자 우선순위를 보고 옳은 순서대로 연산을 예측해봅시다.
순위 | 연산자 | 종류 |
---|---|---|
1 | 일차식 | () [] . |
2 | 단항 | ! ++ -- + - |
3 | 산술 | % / |
4 | 산술 | + - |
5 | 비트 이동 | >> << |
6 | 관계 | < > <= >= |
7 | 관계 | == != |
8 | 비트 곱 | & |
9 | 비트 차 | ^ |
10 | 비트 합 | l |
11 | 논리 곱 | && |
12 | 논리 합 | ll |
13 | 조건 | ? : |
14 | 대입 | = += -= *= %= /= |