'연산자(operator)'는 각종 연산을 수행하는 기호입니다.
'산술 연산자'는 피연산자에 '사칙 연산'과 각종 '산술 연산'을 수행합니다.
'이항 연산자(binary operator)'는 2개의 자료를 대상으로 연산을 수행합니다.
'+, -, *, /'가 있으며 사칙 연산을 수행합니다. '%' 연산자는 '나머지 연산자(modulo operator)'로, 나눗셈의 나머지 값을 얻을 수 있으며, 정수형 자료에만 사용할 수 있습니다.
int x = 10, y = 3;
printf("%d\n", x+y);
printf("%d\n", x-y);
printf("%d\n", x*y);
printf("%d\n", x/y);
printf("%d\n", x%y);
printf("%d\n", y%x);
13
7
30
3
1
3
'단항 연산자(unary operator)'는 하나의 자료에 산술 연산을 수행합니다.
이 증감 연산자는 위치에따라 수행하는 연산이 달라집니다.
int a, i=10;
a = ++i; // a=11, i=11
위의 경우는 전치 연산이라고 하며, i의 값을 먼저 1 증가 시킨 후 사용합니다.
++i 는 i = i+1과 같습니다.
int a, i=10;
a = i++; // a=10, i=11
위의 경우는 후치 연산이라고 하며, i의 값을 먼저 사용한 후 1 증가 시킵니다.
i++ 는 i = i+1과 같습니다.
두 경우 모두 'i=i+1'을 수행하여, i의 값이 결국 1 증가하는 것은 같으나 증가하고 사용하느냐, 사용하고 증가하냐에 따라서 결과 값이 완전히 달라지므로 유의해야합니다.
-- 연산자의 경우 i = i-1과 같으며, --i, i--도 위의 경우처럼 전치, 후치 연산을 구분합니다.
'관계 연산자(relational operator)'는 피연산자가 '같은지, 다른지, 큰지, 작은지'를 비교하는 연산자이며, 결과값은 '참(1), 거짓(0)'으로 나오게됩니다.
int x=1, y=2, z=1;
int a,b,c,d,e,f;
a = x==y; //a=0(false|거짓) 두 수가 같은지를 비교
b = x!=y; //b=1(true|참) 두 수가 다른지를 비교
c = x>y; //c=0(false)
d = x<y; //d=1(true)
e = x>=z; //e=1(true) 두 수가 크거나 같은지를 비교
f = x<=y; //f=1(true)
'논리 연산자(logical operator)'는 피연산자에 논리연산(AND, OR, NOT)을 수행하며, 결과값은 '참(0이 아닌 값), 거짓(0)'으로 나오게됩니다.
논리 곱(AND | &&) | 논리 합(OR | ||) | 논리 부정(NOT | !) | |
---|---|---|---|
a=0, b=0 | 0 | 0 | a=1, b=1 |
a=0, b=1 | 0 | 1 | a=1, b=0 |
a=1, b=0 | 0 | 1 | a=0, b=1 |
a=1, b=1 | 1 | 1 | a=0, b=0 |
'대입 연산자(assignment operator)'는 '='을 사용하며, 연산자의 오른쪽을 왼쪽에 대입합니다.
연산자 | 기능 |
---|---|
i=j | i에 j를 대입 |
i+=j | i에 j를 더한 후 대입 : i = i+j |
i-=j | i에 j를 뺀 후 대입 : i = i-j |
i*=j | i에 j를 곱한 후 대입 : i = i*j |
i/=j | i에 j를 나눈 후 몫을 대입 : i = i/j |
i%=j | i에 j를 나눈 후 나머지를 대입 : i = i%j |
i&=j | i와 j를 이진수로 변환 후 bit 단위의 AND 연산 후 대입 : i = i&j |
i|=j | i와 j를 이진수로 변환 후 bit 단위의 OR 연산 후 대입 : i = i|j |
i^=j | i와 j를 이진수로 변환 후 bit 단위의 XOR 연산 후 대입 : i = i^j |
i <<= j | i를 이진수로 변환 후 j bit 만큼 왼쪽으로 이동 후 대입 : i = i << j |
i >>= j | i를 이진수로 변환 후 j bit 만큼 오른쪽으로 이동 후 대입 : i = i >> j |
'조건 연산자(conditional operator)'는 조건의 만족 여부에 따라 수식을 수행하며, '3항 연산자'입니다.
조건 ? 수식1 : 수식2;
위의 형태를 가지며, 조건이 참이면 수식1을, 거짓이면 수식2를 수행합니다.
int a=1, b=2, c=0;
c = a>b ? c+10 : c+100;
printf("%d", c);
// a가 b 보다 크지 않으므로 '거짓'이 되고, 수식2를 수행하여 c의 값은 '100'이 됩니다.
100
'비트 연산자(bitwise operator)'는 수를 이진수로 변환하여 bit 단위 연산을 수행하며, 정수형일때만 사용할 수 있습니다.
연산자 | 기능 |
---|---|
&(bit AND) | 두 bit가 모두 1일 때 값이 1 |
|(bit OR) | 두 bit 중 하나라도 1일 때 값이 1 |
^(bit XOR) | 두 bit가 서로 다를 때 값이 1 |
~(bit NOT) | 값이 0이면 1, 1이면 0으로 반전 |
<<(bit 왼쪽으로 이동) | 왼쪽의 수를 오른쪽의 수만큼 bit 이동 |
>>(bit 오른쪽으로 이동) | 왼쪽의 수를 오른쪽의 수만큼 bit 이동 |
연산자명 | 연산자 |
---|---|
괄호, 구조체, 공용체 연산자 | (), [], ->, . |
단항 연산자 | !, ~, ++, --, &, *, sizeof(), cast |
----------------------------------- | ----------------------------------- |
*, /, % | |
+, - | |
<<, >> | |
이항 연산자 | <, <=, >, >= |
==, != | |
& | |
^ | |
| | |
&& | |
|| | |
----------------------------------- | ----------------------------------- |
조건 연산자 | ? : |
대입 연산자 | =, +=, -=, *=, ... &= |
위에서 아래로 갈 수록 우선 순위가 낮아져, 나중에 수행하게 됩니다.