2. 상수

《상수의 종류》

 ▷ 리터럴(Iiteral) : 문자 그대로의 상수 값을 지니는 상수

     - 정수형 상수 : 0, 10, 3.0, 1.11

     - 'a'등

 

 ▷ 심볼릭(symbolic) : 상수에 이름이 존재하는 상수

     - 예약어로 constant, define 등을 사용하여 만듦

        EX) 원주율

               #define  PI  3.14 

                     (=PI라는 이름의 상수가 3.14를 가지게 됨, 이 값은 상수이기 때문에 변경할 수 없음)


《리터럴 상수의 예제》

 #include <stdio.h>

 

 int main (void)

 {

           int  a  =  5;        a의 값을 5로 초기화

                        → 리터럴 상수

           return 0;

 }

 

 

《심볼릭 상수의 예제 1》

 #include <stdio.h>

 

 int main (void)

 {

           const  int  MAX  5;         const를 예약어로 사용

                                                                 - 선언된 변수가 아니라 상수라는 의미만 한 상태에서 사용하지 않음

                                                                 - 이 MAX 값은 상수이기 때문에 값을 변경할 수 없음 

                                                        이름을 암묵적으로 대문자(MAX)로 선언

            return 0;

 }


《상수의 장점》

 ▷ 변함이 없는 상수임을 보장받을 수 있음

     - 심볼릭 상수는 사용자 임의대로 이름을 선언할 수 있음

     - 이름을 의도하지 않은 코드에서 변경하면 컴파일러에서 에러 발생

 

 ▷프로그램 전체에서 사용되고 있는 심볼릭 상수 값을 쉽게 바꿀 수 있음

     EX) #define  PI  3.14

                 (상수 값만 변경시키면 프로그램 전체에서 변경 가능)

 


 

《형 변환》

 다른 자료형끼리 변환이 일어나는 것

 정수형   ----------------------->  문자형

 실수형   ----------------------->  정수형

 

 

《형 변환의 종류》

 ▷ 자동 변환

     - 자료형이 자신과 다른 자료형과 연산을 할 때 자동으로 발생

     - 자동 변환으로 인해서 자료형이 축소 또는 확장

 

Q. 자동 변환이 일어나는 이유는?

A. C언어에서는 여러 가지 자료형이 있는 만큼 이러한 자료형끼리 연산을 할 때 통일하기 위해서

컴파일러에 의해서 내부적으로 변환시킴

 

 

 ▷ 강제 변환

     - 컴파일러가 아닌 사용자가 특정한 목적을 가지고 코드에 작성함으로써 발생하는 변환


《자동 형 변환(확장)

 #include <stdio.h>

 

 int main (void)

 {

            short  a  =  5;        short형 변수 a를 사용                                                            크기가 작은 short형 변수 a를 

            long  b                  long형 변수 b를 선언                                                                long형으로 크기를 확장

            =  a                    자동으로 형 변환

                                                     → short형 a의 값을 long형 b에 복사하기 때문

            return 0;

 }

 

 

《자동 형 변환(자료형 축소)

 #include <stdio.h>

 

 int main (void)

 {

            float  a  =  1.5;             실수형 자료형으로 float 자료형을 가지는 a를 선언함과 동시에 1.5라는 값으로 초기화

            int  b;                             정수형 자료형인 b를 선언

           =  a                           대입 연산

                                                             → b는 정수, a는 실수

                                                             → 실수 값을 정수 값에 복사

            return 0;

 }

더보기

float  a  =  1.5                              컴파일러가 내부적으로 실수형 변수 a가 가지고 있는 1.5라는 실수 값을 먼저 정수 값으로 바꿈

 int  b;                                               - 소수점 아래의 값을 버림(1.5 → 1)

 b  =  a                                            - 자료형의 축소 발생(값의 손실 발생) 

 

《강제 변환》

 #include <stdio.h>

 

 int main (void)

 {

            int  a,  b;                          정수형 자료형인 int형 변수 a, b를 선언

            double  c;                       실수형 자료도 c를 선언

           =  3;                             정수형 변수인 a에 3을 대입

            b  =  2;                            b에 정수 값인 2를 대입

            c  =  a  /  b;                    a/b 연산  ( 정수형 : 정수형 나누기 -> 형 변환이 일어나지 않음)

            printf ("%f" ,  c ) ;       실수형 변수 c에 복사하는 연산

 

            return 0;

 }

더보기

printf ("%f" ,  c ) ;       출력 값은 1.5?    = 결과는 1.000000(1.5는 정수가 아니기 때문)

                                                                           이러한 경우를 위해 강제 형 변환이 필요하다.

 

《강제 형 변환》

 #include <stdio.h>

 

 int main (void)

 {

            int  a,  b; 

            double  c;

            a  =  3;

            b  =  2

            c  =  a  /  b;                    (double)라는 코드를 a앞에 적음으로써 1.5 출력

            printf ("%f" ,  c ) ; 

 

            return 0;

 }

더보기

정수형 변수 a에 ()를 이용하여 double 형태로 변환

정수형 a3 -> 실수 3.000000

a/b 나누기 연산 -> a는 실수, b는 정수인 경우 자동 형 변환 발생

실수와 정수의 연산에 의해서 실수 값으로 저장

결과 값 1.5

 

 

 

 

*본 게시글은 K-MOOC <C 프로그래밍 개론>수업을 참고한 게시글입니다.

'C언어' 카테고리의 다른 글

[C언어] 변수와 상수  (0) 2021.05.26
[C언어] 프로그램 작성 실습과 유의사항  (0) 2021.05.22
[C언어] 설치하기(무료)  (0) 2021.05.22
[C언어] 역사  (0) 2021.05.22
[C언어] 프로그램 개발 과정  (0) 2021.05.22

+ Recent posts