일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 구조체
- else if
- list
- 42cursus
- 42
- cout
- 42Seoul
- libft
- 함수
- for
- 동적할당
- 패킹
- Double
- docker
- float
- phpmyadmin
- C언어
- 42서울
- jupyter 단축키
- vs코드 단축키
- While
- 자료형
- iF
- Class
- 포인터
- nginx
- 2차원배열
- C++
- ft_server
- python
- Today
- Total
Developer
10.(C언어) 연산, 연산자 본문
C언어에는 여러가지 연산자가 존재한다.
기본 적인 사칙 연산부터 증감 연산자 등 여러가지 연산자가 존재한다.
사칙연산
#include<stdio.h>
int main(){
int a,b,c,d;
a=1+1;
b=8-2;
c=8*2;
d=8/2;
printf("%d %d %d %d\n",a,b,c,d);
return 0;
}
코드1 처럼 +, -, *, / 한 값의 결과를 변수로 저장할 수 있다. 물론 변수끼리도 연산을 수행할 수 있다.
#include<stdio.h>
int main(){
int a=8,b=2;
int c,d,e,f;
c=a+b;
d=a-b;
e=a*b;
f=a/b;
a=a+2;
b=b-2;
printf("%d %d %d %d %d %d\n",a,b,c,d,e,f);
return 0;
}
a에 8 b에 2가 들어있는 상태로 변수 c에는 a와b 를 더한 값 즉 10이 들어가고,
d에는 a에서 b를 뺀 값 6이 들어간 것을 볼 수 있다.
printf함수 바로 위의 두 줄을 보자
a=a+2;
b=b-2;
등호 기호 오른쪽의 계산이 먼저 진행된다고 생각하면 된다.
a+2를 계산해 현재 a에 들어있는 8과 2를 더해 10이 되고, 10을 다시 a에 저장해주는 셈이다. b또한 마찬가지이다.
C에서는 a=a+2, b=b-2 와 같은 연산을 변수를 한번만 써도 되도록 +=,-= 등의 연산자를 제공한다.
a+=2 연산은 a=a+2의 축약형이라고 생각하면 된다. 이는 곱셈,나눗셈,나머지 연산등의 연산에도 적용된다.
#include<stdio.h>
int main(){
int a=8,b=8,c=8,d=8;
a+=2; //a=a+2와 같다.
b-=2; //b=b-2와 같다.
c*=2; //c=c*2와 같다.
d/=2; //d=d/2와 같다.
return 0;
}
C언어에서 사칙연산은 우리가 알고있는 것과 거의 같지만 나눗셈(/)를 할때 주의할 점이 있다. 한가지는 0으로 나눌경우 컴파일 에러가 발생하는 것이다.
#include<stdio.h>
int main(){
int a=7,b=3;
printf("%d",a/b) ;
return 0;
}
또 한가지는 코드4에서 나오느것과 같은데 C에서는 정수끼리 나눗셈을 하면 결과도 정수가 나온다는 점이다. 코드4를 보면 a/b를 출력하는 것인데 결과로 2가 나오는것을 확인할 수 있다. 최대로 나올 수 있는 정수결과가 출력되는 것이다. 쉽게 정수의 나눗셈에서 나머지는 버리고 몫만 챙긴다고 생각하면 된다.
실수 끼리의 곱셈과 나눗셈 계산에서는 소수점 이하의 자리도 출력이된다.
#include<stdio.h>
int main(){
float a=7.0f,b=2.0f;
printf("%f",a/b);
return 0;
}
하지만 실수의 연산에는 오차가 존재한다. 오차가 발생하는 이유는 모든 소수를 표현할 수 없으므로 근사치를 표현하기 때문이다. 따라서 실수의 계산에서는 적절한 처리가 필요하다.
나머지 연산자
코드4에서 정수끼리의 나눗셈에서는 나머지는 버려지고 몫만 취한다고 말하였다. 그렇다면 나머지를 알고싶을때에는 어떻게 할까? C에는 나머지 연산을 제공한다.
#include<stdio.h>
int main(){
int a=7,b=2;
printf("%d",a%b);
return 0;
}
나머지 연산은 %를 사용한다. a%b는 a를 b로 나누었을때 나오는 나머지 값을 계산해준다. 이 나머지 연산은 정수에서만 사용할 수 있고 실수에서는 사용할 수 없다. 나머지 연산은 여러 곳에서 사용된다. 특히 어떤 수의 배수인지 확인할 때 사용할 수 있다. 많약 a가 b의 배수라면 a%b는 0이 될것이다.
증감 연산자
증감 연산자는 --,++ 연산자를 통해 해당 값을 1증가 혹은 감소 시켜주는 연산자이다. 포인터 연산에서는 자료형의 크기만큼 증가 감소 된다. 증감 연산자는 증가 혹은 감소시키고 싶은 변수의 앞과 뒤에 사용할 수 있다.
변수++ 변수-- --변수 ++변수
위의 4가지 처럼 사용할 수 있다. 하지만 동작 방식이 다르니 주의 하여야 한다.
#include<stdio.h>
int main(){
int a=3,b=4;
int c,d;
c=a++; //c에 a값을 할당한 뒤 a값을 1증가
d=b--; //d에 b값을 할당한 뒤 b값을 1감소
printf("%d %d %d %d\n",a,b,c,d) ;
return 0;
}
a, b, c, d를 순서대로 출력했는데 4 3 3 4가 출력 되었다. c=a++; 연산은 c에 먼저 현재 a값을 할당하고 그 이후에 a값을 1 증가시키는 것이다. 따라서 c에는 a의 원래값인 3이 할당되고, 그 이후 a는 4가 되는 것이다.
d=b--또한 마찬가지이다. 이처럼 변수 뒤에 증감 연산자를 사용한 것을 후위 연산자라고 하며 동작은 먼저 현재의 값을 사용한 뒤 증감 연산자가 수행되는 것이다.
#include<stdio.h>
int main(){
int a=3,b=4;
int c,d;
c=++a; //a를 1증가 시키고 c에 대입
d=--b; //b를 1감소 시키고 d에 대입
printf("%d %d %d %d\n",a,b,c,d) ;
return 0;
}
이번엔 증감 연산자가 변수의 앞에 사용되었다. 후위 연산자와 다르게 증감 연산자가 먼저 수행된 뒤 할당 과정을 진행한다. 이처럼 변수 앞에 증감 연산자를 사용한 것을 전위 연산자라고 하며 전위 연산자는 먼저 증감 연산자가 수행된 뒤 할당 과정을 수행한다.
정리
1.c언어에도 사칙 연산이 가능하다.
2.정수끼리의 연산 결과는 항상 정수이다.
3.실수의 연산에는 오차가 존재한다.
4.후위 연산자는 변수 뒤에 ++,-- 연산자가 오는것을 말하며 먼저 현재 값을 사용한 뒤 값을 증가 혹은 감소 시킨다.
5.전위 연산자는 변수 앞에 ++,-- 연산자가 오는것을 말하며 먼저 값을 증가 혹은 감소 시킨 뒤 변수를 사용한다.
'Programming Language > C' 카테고리의 다른 글
12.(C언어) 논리 연산자,비트 연산자 (0) | 2020.08.01 |
---|---|
11.(C언어) 형 변환 (0) | 2020.08.01 |
9.(C언어) scanf, 입력받기 (0) | 2020.08.01 |
8.(C언어) 상수 (0) | 2020.08.01 |
7.(C언어) 실수 자료형의 표현 방법_부동소수점 (0) | 2020.08.01 |