C언어/참고서: C언어 콘서트

C언어 14차시 연산자 우선순위, 결합 규칙, 형변환, 자동변환, 명시변환

Olivia-BlackCherry 2023. 3. 22. 11:22

목차

    1. 연산자 우선순위 precedence

    우선순위는 여러 연산 중에 어떤 연산을 우선으로 할지 결정하는 규칙이다. 

    과거에 배웠던 수학을 생각하면 된다. 

     

    출처: C언어 콘서트(이하 생략)

     

     

    2. 연산자 결합규칙 association

    결합규칙이란 동일한 우선순위의 연산이 있는 경우 무엇을 먼저 하느냐에 대한 규칙이다.

    대부분 왼쪽에서 오른쪽으로 결합하지만, 

    다항 연산자들과 대입 연산자는 오른쪽에서 왼쪽으로 결합한다. 

     

     

    3. 형변환 type casting

    데이터타입을 변환시킨다. 

    1) 자동 변환

    - 올림 변환 promotion

    낮은 자료형에서 높은 자료형으로 자동 변환되는 것을 의미한다. 

    서로 다른 자료형이 혼합되어 사용되는 경우, 더 큰 자료형으로 통일된다. 

    double a= 1.134;
    int b = 10; //계산될 때 자동으로 10.0이 된다.
    a + b = 11.134; //계산 결과 값도 double형이다.
    double f;
    f=5; //f에는 5.0이 저장된다

     

    - 내림변환 demotion

    대입 연산 시에 낮은 등급의 자료형으로 자동 변환되는 것을 의미한다. 

    데이터의 손실이 발생한다. 

    int x;
    x=3.1234; //x에는 3이 저장된다

     

     

    2) 명시 변환

    형변환 연산자 type cast(=캐스트 연산자) 를 사용한다. 

    (자료형) 수식
    (int)1.234  정수형으로 변환
    (double)x   double형으로 변환
    (long)(x+3)  long형으로 변환

     

     

    4. 연습문제

    4-1. 다항식 계산하기

    <결과>

    <코드>

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main(void)
    {
    	double x, y;
    	printf("x값을 입력하세요:__\b\b");
    	scanf("%lf", &x);
    	y = 3.0 * x * x + 7.0 * x + 9.0;
    	printf("3.0 * x * x + 7.0 * x + 9.0: %lf \n\n", y);
    
    	return 0;
    }

     

    4-2. 비트 연산

    출처: C언어 콘서트

    냉장고의 상태를 나타내는 칩이 있다. 그 칩은 8비트의 값으로 나타난다.

    만약 비트0이 1이라면 문이 열린다.

    비트0이 1인지 아닌지를 검사하는 코드를 작성해보자. 

    <결과>

    <코드>

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    int main(void)
    {
    	int status = 0x6f;  //6:0110 F:1111 ---> 01101111
    	printf("문이 열렸으면 1, 닫혔으면 0: %d\n", (status & 0x01)); //0:0000, 1:0001 --->00000001
    
    	return 0;
    }

     

     

    4-3 복리 원리금 계산

    원금, 이자, 기간을 설정 후, 복리로 예금했을 때 총액은 얼마인지 구해보자. 

    <결과> 

    <코드>

    #define _CRT_SECURE_NO_WARNINGS
    #include <stdio.h>
    #include <math.h>
    int main(void)
    {
    	double principal, interest, year, amount;
    	principal = 200.0;
    	interest = 0.04;
    	year = 5;
    	amount = principal * pow((1+interest), year);
    	printf("%lf후 원금과 이자 총액은 %lf입니다.\n", year, amount);
    	return 0;
    }

    ※ 주의점

    거듭제곱을 계산하려면 pow()함수가 필요하다. 

    pow(제곱할 수, 횟수) 
    pow(~의, ~승)
    pow(10, 2) = 10의 2승

    pow함수를 쓰려면 첫 줄에 #include <math.h>를 포함한다.