9. 곱셈, 나눗셈 연산자
1. 키워드
- 곱셈 연산자와 나눗셈 연산자
2. 곱셈, 나눗셈하기
- 다음과 같이 곱셈은
*
연산자, 나눗셈은/
연산자를 사용한다.
#include <stdio.h>
int main()
{
int num1;
int num2;
num1 = 2 * 3; // 2에 3를 곱해서 num1에 저장
num2 = 7 / 2; // 7에서 2를 나누어서 num2에 저장
printf("%d\n", num1);
printf("%d\n", num2); // 소수점을 사용하지 않고 최대한 나눌 수 있는 값이 3
return 0;
}
// 6
// 3
- 곱셈은 특별한 것이 없지만 나눗셈은 결과를 보면
3.5
가 아니라3
이 나온다. - 왜냐하면 C에서는 정수끼리 나눗셈을 하면 결과도 정수가 나오기 때문이다.
- 즉,
7
을2
로 나누었을 때 소수점을 사용하지 않으면서 최대한 나눌 수 있는 값이3
이다.
- 나눗셈에서 또 한 가지 주의해야 할 점은 다음과 같이 정수를
0
으로 직접 나누면 컴파일 에러가 발생한다는 것이다.
- 만약 변수에 정수와
0
을 저장해서 나누면 컴파일 에러는 발생하지 않지만 실행을 하면 에러가 발생한다.
#include <stdio.h>
int main()
{
int num1 = 1;
int num2 = 0;
int num3;
num3 = num1 / num2; // 1을 0으로 나눔. 실행 에러 발생
printf("%d\n", num3);
return 0;
}
- 이번에는 실수를 계산해 보자.
#include <stdio.h>
int main()
{
float num1;
float num2;
num1 = 2.73f * 3.81f; // 2.73에 3.81f을 곱해서 num1에 저장
num2 = 7.0f / 2.0f; // 7.0에서 2.0을 나누어서 num2에 저장
printf("%f\n", num1); // 10.401299
printf("%f\n", num2); // 3.500000
return 0;
}
- 정수끼리 나눗셈과는 달리 실수끼리 나눗셈을 하면 소수점 이하 자리까지 계산이 된다.
- 즉,
7.0
에서2.0
을 나누었으므로3.5
가 나온다.
- 실수 계산에서 한 가지 특이한 점은 다음과 같이 계산 결과에서 오차가 발생한다는 점이다.
- 실수의 계산 오차는 곱셈뿐만 아니라 덧셈, 뺄셈, 나눗셈에서도 나타난다.
- 실수도 0으로 직접 나누면 컴파일 에러가 발생한다.
- 하지만 다음과 같이 변수에 실수와
0.0
을 저장해서 나누면 결과가 정수와는 다르게 나온다.
#include <stdio.h>
int main()
{
float num1 = 1.0f;
float num2 = 0.0f;
float num3;
num3 = num1 / num2;
printf("%f\n", num3); // inf
return 0;
}
0
을 어떤 수로 나누면 어떻게 되나요?
0 / 10
과 같이0
을10
으로 나누면 결과는0
이다.- 즉,
0 / 10 = 0
에서10
을 등호 오른쪽으로 보내면0 = 0 * 10
이 되므로 올바른 식이다.
3. 변수 하나에서 값을 곱하거나 나누기
- 이번에는 변수 하나에서 값을 곱하거나 나누는 방법을 알아보자.
#include <stdio.h>
int main()
{
int num1 = 2;
int num2 = 7;
num1 = num1 * 3; // num1에 3을 곱한 뒤 다시 num1에 저장
num2 = num2 / 2; // num2에서 2를 나눈 뒤 다시 num2에 저장
printf("%d\n", num1); // 6
printf("%d\n", num2); // 3
return 0;
}
num1 = num1 * 3;
은num1
에3
을 곱한 뒤 다시num1
에 저장하고,num2 = num2 / 2;
는num2
에서2
를 나눈 뒤 다시num2
에 저장한다.- 즉, 계산 결과를 같은 변수에 계속 유지한다.
- 여기서 나눗셈 연산은
0
으로 나누지 않도록 주의한다.
- 곱셈과 나눗셈도 변수를 두 번 입력하지 않도록 곱셈 후 할당
*=
, 나눗셈 후 할당/=
연산자를 제공한다.
#include <stdio.h>
int main()
{
int num1 = 2;
int num2 = 7;
num1 *= 3; // num1에 3을 곱한 뒤 다시 num1에 저장
num2 /= 2; // num2에서 2를 나눈 뒤 다시 num2에 저장
printf("%d\n", num1); // 6
printf("%d\n", num2); // 3
return 0;
}
num1 *= 3;
은 곱셈과 할당 연산을 동시에 처리한다.- 즉,
num1 = num1 * 3;
의 축약형이다. num2 /= 2;
는 나눗셈과 할당 연산을 동시에 처리한다.- 마찬가지로
num2 = num2 / 2;
의 축약형이다. - 참고로
num1 *= num2
또는num1 = num1 * num2
와 같이 모두 변수를 사용하여 연산해도 상관없다.