[CS_study] 연산자

나라리야·2021년 4월 22일
0

CS_study

목록 보기
4/18
post-thumbnail

연산자와 피연산자

1) 연산자(Operator)란 연산을 수행하는 기호를 의미 (+,-,*...등등)
2) 피연산자(Operand)란 연산에 포함되는 변수나 상수를 의미
3) 아래 예제의 A+B에서 A와B는 피연산자에 해당, +는 연산자에 해당한다.


연산자의 종류

C언어에는 다양한 연산자가 존재한다.

1) 대입 연산자

‘=’ 등호(Equals Sign)를 이용해서 우변항을 좌변항에 넣을 수 있다.
자료형에 부합하는 값을 좌변항에 있는 변수에 넣는다.
'같다'라는 뜻이아닌 '대입하다'라는 뜻

2)산술연산자 (사칙연산)

C언어에서는 기본적인 사칙 연산을 사용할 수 있다.
다만 나누기가 조금 다른데, 나누기(/)기호는 몫만 계산하기 때문에 나머지를 구하기 위해 모듈러(Modular) 연산을 사용해야한다. 여기서 모듈러란 (%)를 뜻한다.

사칙연산 예제)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
int a, b;
scanf("%d %d", &a, &b);
printf("%d + %d = %d\n", a, b, a + b); 
printf("%d - %d = %d\n", a, b, a - b); 
printf("%d * %d = %d\n", a, b, a * b); 
printf("%d / %d = %d\n", a, b, a / b); 
printf("%d %% %d = %d\n", a, b, a % b); 
system("pause");
}

// 입력값 7 3 이라면 
// 7+3 = 10
// 7-3 = 4
// 7*3 = 21
// 7/3 = 2
// 7%3 = 1 이 출력된다. 

이스케이프 시퀀스(Escape Sequence)

C언어에서 특정한 표현을 출력하기 위해 사용하는 문법

예제)
#include <stdio.h>
int main(void) {
  printf("\"A\tB\tC\tD\"\n");
  printf("\"A\tB\tC\tD\"\n");
  printf("\"A\tB\tC\tD\"\n");
  system("pause");
}
// (\n), (\t) , (\\), (\"), (\b) 이렇게 이스케이프 시퀀스를 사용한다. 

3)관계 연산자


수학과 동일한 부등호의 뜻을 가진다. 다만, ! 느낌표는 (not)의 의미를 가지고 있다.

1) 컴퓨터는 0을 거짓(false)로 받아들이며, 그 외의 숫자는 참(true)로 받아들인다.
2) 컴퓨터가 거짓(false)를 출력할때는 0을, 참(true)를 출력할 때는 1을 출력한다.


예제)

#define _CRT_SECURE_NO_WARNINGS
//사용자로부터 입력을 받을 것이다
#include <stdio.h>

int main(void) {
  int a, b;
  scanf("%d %d", &a, &b);
  printf("%d\n", a > b);
  system("pause");
}

// 9 10을 입력받으면 -> 9>10은 false 이기때문에 
// 0이 출력된다. 

4)논리 연산자

! 부정연산자는 true->false로 바꿔버릴 수도있다.
&& 연산자는 모든 수식이 true일때만 true이고 한 가지 수식이라도 false이면 false 값을 가진다.
|| 연산자는 모든 수식 중 하나라도 true 값을 가지면 true로 출력될 수 있다.

예제)

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

int main(void) {
int a, b, c;
scanf("%d %d %d", &a, &b, &c); 
printf("%d\n", !a);
printf("%d\n", a && b); 
printf("%d\n", (a > b) && (b > c)); 
system("pause");
return 0;
}

// 두개의 수식을 비교할때는 a > b > c가 아니라 (a > b)  (b > c) 로 나눠서 비교해야한다 (컴퓨터는 똥멍청이니깐)
// 10 8 5 를 차례대로 입력을 받았을 경우 
// 0 1 1 이 출력된다. 

5)증감 연산자

++기호가 변수 앞에 먼저 붙어있으면 먼저 증가시킨 후 그 값을 반환하고 ++기호가 변수 뒤에 붙어있으면 증가 되기 전의 값을 반환 해야한다.

#include <stdio.h>
int main(void) {
  int a = 7,;
  printf("%d\n", ++a);
  printf("%d\n", a++);
  printf("%d\n", ++a);
  system("pause");
  return 0;
}
//순서대로 8, 8, 10이 출력됨 

6) 삼항 연산자

세 개의 항을 이용해서 조건문을 수행할 수 있는 연산자

#include <stdio.h>
int main(void) {
  int a = 7, b = 7;
  printf("%d\n", (a == b) ? 100 : -100);
  system("pause");
  return 0;
}

// 삼항연상자 공식 -> ((비교할조건) ? 참일때 : 거짓일때)

7) 비트 연산자

비트 단위의 연산을 수행할 수 있다.

~연산자는 비트연산자에서만 not의 의미를 가지는데 기본적으로 0과1로만 구성되어있는 수를 나타내는 비트에서 ~가붙으면 각 자리수가 반대인 값이 출력된다.

&연산자는 두개의 각 자리수의 값을 비교하여 둘다 1인 곳만 찾아 출력하게 된다

|연산자는 둘 중 하나의 자리라도 1을 가지게 된 곳이 있다면 1로 출력하게 된다.

^배타적연산자는 둘 중의 한 개만 1일때, 1이 출력된다 (둘다1인자리는 0으로 출력된다.)

<<,>> 왼쪽시프트 오른쪽시프트 연산자는 말그대로 한쪽으로 비트를 몰아넣는데 한번에 비트를 이동시킬 때 많이 사용한다.
이 시프트(shift)연산자는 2의 배수를 처리하고자 할 때 매우 효율 적이다.

비트로 9를 표현 (8과 1자리 00001001)

왼쪽 시프트를 수행하면 9에서 18로 2배 증가한다.
(왼쪽으로 한칸씩 비트를 옮겼다 16과 2자리 0010010)

다시 오른쪽 시프트를 수행하면 2를 나눈 값으로 9가 나온다.


연산자 우선순위


연산자 총 정리 !

profile
Code의 美를 추구하는 개발자 🪞

0개의 댓글