Skip to content

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에서는 정수끼리 나눗셈을 하면 결과도 정수가 나오기 때문이다.
  • 즉, 72로 나누었을 때 소수점을 사용하지 않으면서 최대한 나눌 수 있는 값이 3이다.


  • 나눗셈에서 또 한 가지 주의해야 할 점은 다음과 같이 정수를 0으로 직접 나누면 컴파일 에러가 발생한다는 것이다.


num1 = 1 / 0; // 1을 0으로 나눔. 컴파일 에러 발생

// warning: division by zero is undefined


  • 만약 변수에 정수와 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가 나온다.


  • 실수 계산에서 한 가지 특이한 점은 다음과 같이 계산 결과에서 오차가 발생한다는 점이다.


printf("%f\n", 2.73f * 3.81f); // 10.401299: 실제 계산 값은 10.4013


  • 실수의 계산 오차는 곱셈뿐만 아니라 덧셈, 뺄셈, 나눗셈에서도 나타난다.


  • 실수도 0으로 직접 나누면 컴파일 에러가 발생한다.


num1 = 1.0f / 0.0f; // 1.0을 0.0으로 나눔. 컴파일 에러 발생

// warning: division by zero is undefined


  • 하지만 다음과 같이 변수에 실수와 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과 같이 010으로 나누면 결과는 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;num13을 곱한 뒤 다시 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와 같이 모두 변수를 사용하여 연산해도 상관없다.

References