티스토리 뷰

C언어

C 제5강 - 자료형과 형변환

쉬엄쉬엄하자 2020. 1. 11. 14:29
728x90

0.

지난 포스팅에 이어서 자료형과 관련된 내용을 다뤄보겠습니다. 자료형은 컴퓨터에게 변수의 종류를 알려주기 위해 존재합니다. 변수를 선언할 때 컴퓨터에게 사용목적을 명확하게 알려주고 이후에 그 사용목적에 맞게 사용할 수 있게 됩니다. 하지만 처음 선언했을 떄의 자료형과 다른 목적으로 사용하면 어떻게 될까요? 이와 관련된 내용이 바로 형변환이라는 것입니다. 이처럼 유동적으로 사용목적에 맞게 자료형이 변환되어 인식되는것을 형변환이라고 합니다. 하지만 모든 자료형이 자유롭게 변환되는 것이 아니기 때문에 어떤것이 허용되고 오류를 발생하는지에 대해 알아봅시다.

 

1. 형변환

예시를 통해 형변환이라는게 무엇인지 알아보겠습니다.

먼저 my_first_cast라는 int형 변수를 선언하였습니다.

그러나 다음줄에 이상하게 값을 대입하였습니다. 분명 변수를 선언할 때 정수를 가진 변수로 선언을 하였지만 수가 아닌 문자를 값으로 할당하였습니다. 상식적으로는 오류가 발생하지 않을까 싶지만 오류는 발생하지 않습니다. 우리가 int형으로 변수를 선언하였기 때문에 해당 변수에 문자를 값으로 넣는다 하더라도 컴퓨터는 알아서 정수로 인식합니다.

출력결과를 한번 보겠습니다.

 

65가 출력되었습니다. 왜 이런 결과가 나왔는지 알려면 우리는 '아스키코드'란 것에 대해 알아야 합니다.

 

컴퓨터는 내부로 들어가보면 모두 0과 1로 이루어져 있다고 말씀드렸습니다. 그래서 사실상 int형이든 char형이든 컴퓨터입장에서는 결국엔 0과1로 이루어진 조합입니다. 문자역시 문자그대로를 컴퓨터가 이해하는것이 아니라 문자를 0과1의 조합으로 변환되어 있는것을 컴퓨터가 이해하는 것입니다. 따라서 변수를 int형으로 선언하고 문자값을 입력하였어도 해당 'A'를 0과1의 조합으로 변환한 결과를 컴퓨터는 int형이라고 생각하고 이를 숫자로 인식하고 65가 출력되는것이죠.

그래서 우리가 사용하는 알파벳이나 특수문자 등을 숫자로 바꿔 표를 만들어놓은것이 아스키 코드입니다.

흔히들 고의적으로 알파벳을 사용하여 굳이 숫자로 만들지는 않으나 어떤 프로그램을 만들때는 이러한 형변환을 고의적으로 사용하기도 합니다.

 

아스키코드표

 이제 형변환이 허용 되지 않는 경우를 살펴보겠습니다.

 

코드를 보시면 int형과 float형 변수 2개를 선언하였고 int형변수에 5/2 인 2.5를 float형 변수에는 정상적으로 3.0을 할당하였습니다. 

그리고 출력문에서 my_first_cast를 출력하고 my_second_cast를 각각 %d와 %f로 출력해보겠습니다.

 

보시는거와 같이 int형변수는 소수점이 있는 값이 할당되도 소수점 자리의 숫자는 모두 버리고 할당된다는 것을 알수 있습니다. 그리고 float형 변수를 %f로 출력할 때는 정상적으로 되지만 %d는 int형 변수를 출력하기 위한 것이므로 완전히 잘못된 값이 출력되는것을 보실 수 있습니다.

 

만약 이후에 많은 프로그래밍을 시도해볼 때 원했던 결과가 계속해서 안나온다면 자료형의 변환이 이루어지는 부분이 없는가를 살펴 보아야 할 것입니다.

 

여기서 float형에서 int로의 강제 변환은 원하지 않는 결과를 발생시키기 때문에 사용하지 않을것처럼 보이는데요. 

하지만 의외로 이러한 특성이 프로그래밍을 쉽게 해줄수도 있습니다. 예를들어 5를 2로 나누었을때 프로그래머가 나머지를 제외하고 몫에만 관심이 있다고 한다면 별다른 작업없이 5 / 2의 수식을 사용하면 알아서 몫만 남게됩니다.

이러한 경우에는 오히려 소수점을 잃는것이 더 편한 작업이 되는 셈이지요.

 

이처럼 형변환은 오류를 발생시키는 요소가 될 수도 있지만 적재적소에 잘 활용하면 더 편한 프로그래밍을 할 수도 있습니다. 하지만 기초단계에서는 자료형을 꼭 지켜서 활용하는것에 익숙해지는것을 목표로 합시다.

 

2. 논리형

참과 거짓만을 나타내는 bool형은 한자리의 0또는1로 나타낼 수 있는데요. 이 이진수는 십진수로도 0또는1이 됩니다. 그래서 논리형과 정수의 형변환으로 인해 bool형을 편의상 숫자로 0또는1의 값으로 쓰는 경우가 많습니다. 이에 대한건 이후에 조건문 파트에서 더욱 자세히 알아보겠습니다.

 

3. 실습

int 형 변수 하나를 선언하고 3 + 3.5의 값을 할당한뒤 출력해보시오.

 

char 변수 2개를 선언하고 각각 'A' , 'B'의 값을 할당하고 int형 변수에 2개의 char 형변수의 합을 할당하여 출력해보시오.

 

float형 변수와 char형변수에 각각 적절한 값을 할당하고 int형 변수에 두 변수의 합을 할당하여 출력해보시오.

 

 

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

C 제6강 - 연산자  (0) 2020.01.30
C 기초 - printf 와 scanf  (0) 2020.01.19
C 제4강 - 변수와 자료형  (0) 2020.01.09
C 제3강 - 첫 프로젝트 시작하기  (0) 2020.01.02
C 제2강 - 비주얼 스튜디오 설치하기  (0) 2020.01.02
댓글