30 – 형 변환 & 캐스트 연산자

int형 데이터와 float형 데이터에 대한 연산, 즉 서로 다른 데이터형에 대한 연산은 이루어지지 않는다. 내부에서의 표현하는 방식이 전혀 다르기 때문이다. 그러나, 언어에서는 서로 다른 데이터형일 때, 작은 크기의 데이터형을 큰 데이터형으로 변호나해 연산을 할 수 있게 해준다. C언어도 해당된다.

음… 예시 코드에도 사용했던 것인데, 예시를 살펴본다.

스크린샷 2017-02-16 오후 3.07.12

char형은 1바이트이고, int형은 4바이트로 표현된다.

char | 01100001
int    | 00000000000000000000000100000000

이 둘을 연산하기 위해서는 이 둘의 크기가 같아야 연산을 할 수 있는데, int형의 사이즈를 줄이면 데이터가 잘릴 수 있기 때문에 char형을 늘려야 한다. 데이터 형을 늘릴 때에는 앞자리를 전부 0으로 채운다.

char | 00000000000000000000000001100001
int    | 00000000000000000000000100000000

이렇게 하여 둘을 연산한 결과는 int형태로 되어 연산이 된다. 실행 결과는 아래와 같다.

이런 연산 시 데이터형 자동변환에는 규칙이 있다. 규칙에 대해서는 다음과 같다.

  1. long double형이 있으면, 다른 피연산자를 long double형으로 변환하다.
  2. 그렇지 않고 double형이 있으면, 다른 피연산자를 double형으로 변환한다.
  3. 그렇지 않고 float형이 있으면, 다른 피연산자를 float형으로 변환한다.
  4. 그렇지 않고 (unsigned) long형이 있으면, 다른 피연산자를(unsigned) long형으로 변환한다.
  5. 그렇지 않고(unsigned) int형이 있으면, 다른 피연산자를(unsigned) int형으로 변환한다.
  6. 그렇지 않으면 char형 또는 short형을 int 형으로 변환한다.

이게 왜 이렇게 되는지는 컴퓨터 구조에서 숫자 연산 과정을 살펴보면서 이 규칙을 보면 잘 이해가 될 것이다. (이래서 기본 이론이 진짜 중요하다.)

그리고 C언어에서는 사용자가 임의로 현 변환을 할 수 있다. (다른 언어도 마찬가지) 이 때 사용하는 연산자가 캐스트 연산자이다. 변환하려는 변수 앞에 괄호를 처리하여 바꾸려는 형을 작성해준다. 아래의 예시를 보면, 10.7과 30.8같은 소수점 연산자를 int형으로 변환하였다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.