연산자

코딩하는 기린·2022년 3월 2일
0

C

목록 보기
4/13

'연산자(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() : 괄호 안의 변수의 자료형이 차지하는 기억공간의 크기를 byte로 구함
  • cast(형변환) : 해당 자료형을 다른 자료형으로 강제 변환
  • &(ampersand) : 주소 연산자로, 해당 연산자의 주소를 나타냄
  • *(asterisk) : 내용 연산자로, 해당 연산자의 내용을 나타냄

연산자의 우선 순위

연산자명 연산자
괄호, 구조체, 공용체 연산자 (), [], ->, .
단항 연산자 !, ~, ++, --, &, *, sizeof(), cast
----------------------------------- -----------------------------------
*, /, %
+, -
<<, >>
이항 연산자 <, <=, >, >=
==, !=
&
^
|
&&
||
----------------------------------- -----------------------------------
조건 연산자 ? :
대입 연산자 =, +=, -=, *=, ... &=

위에서 아래로 갈 수록 우선 순위가 낮아져, 나중에 수행하게 됩니다.

profile
Coding Giraffe.

0개의 댓글