[C프로그래밍] 3.2 연산자

이두팔·2021년 4월 21일
0

C프로그래밍

목록 보기
2/5

3.2 연산자

연산자(operator)란 임의의 자료에 대해 각종 연산을 수행하게 하는 기호를 말한다.

1 산술 연산자

피연산자에 대해 사칙연산을 포함한 각종 산술연산을 수행하는 연산자

(1) 이항 연산자

2개의 자료를 대상으로 산술적인 처리를 수행하는 연산자이다. 사칙연산 연산자와 % 연산자(나눗셈의 나머지 값을 이용하는 나머지 연산자)가 있다.

% 연산자는 정수형 자료에만 사용할 수 있고, 실수형 자료에는 사용할 수 없다.

#include <stdio.h>
int main()
{
  int x, y;
  x = 10;
  y = 3;
  printf("x + y = %d \n", x + y);
  printf("x / y = %d \n", x / y);
  printf("x %% y = %d \n", x % y); // %문자를 출력하기 위해 %문자를 2개 연속으로 사용
  printf("y %% x = %d \n", y % x);
}

(2) 단항 연산자

1개의 자료만을 대상으로 산술적인 처리를 수행하는 연산자이다. ++, — 연산자를 증감 연산자라고도 한다.

이러한 연산은 모두 정수형 변수에만 사용되어야 하며 특히 ++, — 연산자는 사용 위치에 따라 그 기능이 달라질 수 있음에 주의해야 한다.

i++(후치연산) : i의 값을 먼저 사용한 후 1을 증가시킨다.

++i(전치연산) : i의 값을 먼저 1 증가시킨 후 사용한다.

x = i++ ⇒ x = 5, i = 6

x = ++i ⇒ x = 6, i = 6

#include <stdio.h>
int main()
{
  int a, b, c;
  a = b = c = 0;
  a = ++b + ++c; // b와 c의 값을 1 증가하고 두 값을 더한 값을 a에 대입
  printf("a = ++b + ++c 실행 후 a = %d, b = %d, c = %d \n", a, b, c);
  a = b++ + c++; // c의 값을 1 증가한 후 b와 더해서 a에 대입하고 b의 값을 1 증가
  printf("a = b++ + c++ 실행 후 a = %d, b = %d, c = %d \n", a, b, c);
  a = b-- + --c; // c의 값을 1 감소한 후 b와 더해서 a에 대입하고 b의 값을 1 감소
  printf("a = b-- + --c 실행 후 a = %d, b = %d, c = %d \n", a, b, c);
}
  • 실행 결과
a = ++b + ++c 실행 후 : a = 2, b = 1, c = 1
a = b++ + c++ 실행 후 : a = 2, b = 2, c = 2
a = b-- + --c 실행 후 : a = 3, b = 1, c = 1


2 관계 연산자

#include <stdio.h>
int main()
{
  int a = 4, b, c, d;
  b = a > 2; // a가 2보다 큰가를 비교, 겨로가가 참이므로 b에 1대입
  printf("b = %d \n", b);
  c = a < 2; // a가 2보다 작은가를 비교, 결과가 참이므로 c에 0대입
  printf("c = %d \n", c);
  d = a == 4; // a가 4인가를 비교, 결과가 참이므로 d에 1대입
  printf("d = %d \n", d);
}
  • 실행 결과
b = 1
c = 0
d = 1

3 논리 연산자

#include <stdio.h>
int main()
{
  int a = 4, b = 7, c, d, e;
  c = a > 2 && b <= 7; // 둘다 참이므로 참(논리곱)
  printf("c = %d \n", c);
  d = a < 2 || b <= 7; // a가 거짓 b는 참이므로 참(논리합)
  printf("d = %d \n", d);
  e = !a; // a가 참(0이 아님)이므로 거짓(논리부정)
  printf("e = %d \n", e);
}
  • 실행 결과
c = 1
d = 1
e = 0

4 대입 연산자

#include <stdio.h>
int main()
{
  int a = 10, b = 3, c = 1;
  a *= (b - 1); // a = a * (b - 1)의 의미
  b /= 2 + 3; // b = b / (2 + 3)이고 정수형끼리의 나눗셈이므로 결과는 0
  c += 2; // c = c + 2
  printf("a = %d, b = %d, c = %d", a, b, c);
}
  • 실행 결과
a = 20, b = 0, c = 3

5 조건 연산자

#include <stdio.h>
int main()
{
  int a = 10, b;
  b = (a > 15) ? (a + 1) : (a - 1); // 조건을 만족하지 않으므로 a - 1을 수행
  printf("b = %d", b);
}
  • 실행 결과
b = 9

6 비트 연산자

수치를 2진수로 변환하여 bit 단위의 연산을 수행하는 연산자.

정수형 자료에서만 사용이 가능하다


7 기타 연산자

(1) sizeof() 연산자

  • 지정한 자료(자료형, 상수, 변수, 수식)에 대한 기억장소의 크기를 구한다.
#include <stdio.h>
int main()
{
  float a = 3.14;
  // int형의 자료 크기를 출력
  printf("int형의 크기는 = %ld바이트 \n", sizeof(int));
  // float형인 a의 크기를 출력
  printf("float형 변수 a의 크기는 = %ld바이트 \n", sizeof(a));
}
  • 실행 결과
int형의 크기는 = 4바이트
float형 변수 a의 크기는 = 4바이트

(2) cast 연산자 (형변환 연산자)

'자동 형변환'과 '강제 형변환'이 있다.

자동 형변환은 컴파일러에 의해 자동으로 발생하는 형변환

강제 형변환은 cast 연산자를 사용해 프로그래머가 형변환을 명시해서 강제로 변환이 일어나는 것

  • 자동 형변환
#include <stdio.h>
int main()
{
  int a = 3, b = 4;
	double c;
	c = a / b;
	printf("나눗셈 결과 : %f \n", c);
}

- 실행 결과
나눗셈 결과 : 0.000000

연산 결과의 자료형은 피연산자의 자료형(int)과 일치하기 때문에 나눗셈 결과는 0이 되고, 그 값이 double형으로 자동 변환되어 c에 저장



  • 강제 형변환
#include <stdio.h>
int main()
{
  int a = 3, b = 4;
	double c;
	c = (double)a / b;
	printf("나눗셈 결과 : %f \n", c);
}

- 실행 결과
나눗셈 결과 : 0.750000

cast 연산자에 의해 a에 저장된 값을 double형으로 변환, c = 3.0 / b가 된다

profile
Software Engineer

0개의 댓글