자료형이란 무엇인가요?
자료형이란 데이터를 표현하는 기준이 되며, 정수형 자료형, 혹은 실수형 자료형 인지 등의 데이터의 표현 기준을 정해주고, 명확한 데이터의 크기를 알려줌으로써 메모리에 보다 효과적으로 자료가 저장될 수 있도록 해줍니다.
대표적인 자료형으로는 char, int, float, double 등이 있으며 각각 1바이트, 4바이트, 4바이트, 8바이트의 크기를 가집니다.
이러한 자료형의 크기를 구하는 연산자로는 sizeof() 함수가 있으며 다음과 같이 사용합니다.1
2int num = 1
numSize = sizeof(num)
우리가 컴퓨터에서 표현하는 자료는 앞서 말했듯이 정수와 실수의 큰 기준으로 나뉘게 되며, 여기서 실수형을 표현하는 경우 정확도 향상을 위해 float 이 아닌 double을 사용 합니다.
또 어떤 자료형들이 있나요?
C 프로그래밍 시에 자료형 앞에 unsigned와 같은 키워드가 붙은 것을 많이 보았을 겁니다.
이 것은 바로 해당 자료형이 unsigned로 나타내는 것을 의미하며 즉, 음수를 구분하지는 못하지만 2배 더 큰 숫자까지 나타낼 수 있게 해주는 것을 의미합니다.
그밖에, 문자를 표현하기 위한 char 자료형이 있는데 이는 ASCII 코드에 의거하여 문자를 나타내는 것을 의미합니다.
이러한 ASCII 코드는 1바이트 즉 256가지의 문자를 표현하며, 기본적으로 컴퓨터 내에서 정수형 자료형으로 나타내어 지므로, 정수형 표현과 문자형 표현이 모두 가능합니다.
가령 다음의 예제를 살펴봅시다.1
2
3char examplChar = "a"
printf("%d", examplChar)
이 경우 문자 a의 정수형 표현을 ASCII 코드표에서 찾아 나타내어 줍니다.
상수란 무엇인가요?
상수는 int, double에 근거한 것으로 메모리 내에 이름이 없는 literal 상수와 이름이 있는 symbolic 상수로 구분됩니다.
이러한 상수는 한번 선언되면 그 값이 바뀔 수 없으며, 만약 이름이 있는 symbolic 상수로 선언되는 경우 이름은 대문자와 아래바 _
로 구성되는 것이 일반적입니다.
다음의 예는 literal 상수의 예를 보여줍니다.1
int exampleNum = 5 + 6
이렇게 literal 상수는 별도의 선언이 없이 값을 나타내며, 위의 경우 5와 6은 literal 상수입니다.
다음은 symbolic 상수의 예를 나타냅니다.1
const int MAGIC_NUMBER = 1
이렇게 기본 자료형 int 앞에 const 키워드를 붙여 줌으로써 symbolic 상수를 선언하며, 선언과 동시에 초기화가 되어야 합니다.
만약 상수에 자료형을 지정해 주고 싶다면 어떻게 할까요?
다음은 상수 자료형에 float 으로 표기를 지정해 주는 예를 나타냅니다.1
long exampleNum = 5.1235L
이처럼 상수의 뒤에 U, L, UL, LL, F 등을 나타냄으로써 자료형을 알려줄 수 있습니다.
자료형 형 변환
이렇게 한번 선언된 자료형은 프로그래밍 도중에 변경될 수 있으며 이것을 형 변환 이라고 합니다.
형변환 에는 자동으로 형이 변환되는 자동 형 변환 과 사용자가 형을 변환해 주는 강제 형 변환 이 있습니다.
먼저 자동 형 변환은 보통 자료형을 일치시켜 계산해야 하는 경우 또는 대입 시에 강제로 형 변환이 되는 경우, 연산 시 빠른 연산을 위해 CPU 에서 자동으로 변환이 되는 경우가 있습니다.
먼저 자료형 일치를 위한 자동 형 변환의 예를 살펴봅시다.1
2
3int num1 = 5
double num2 = 5.6235
double result = num1 + num2
위의 예의 경우 num1 과 num2 는 다른 자료형을 가졌기 때문에, 덧셈연산이 불가능 합니다.
이렇게 되면 컴퓨터는 자동으로 num1 과 num2 중 하나의 자료형에 맞추어 연산을 진행하게 되는데, 그 판단의 근거는 정확도를 높이는 방향 으로 진행된다는 것 입니다.
위 예의 경우 num1 과 num2 가 int 형으로 변환되어 계산이 된다면 큰 오차가 생기므로 적은 오차범위를 가지도록 둘 다 double 형으로 변환이 되어 계산이 되게 됩니다.
다음 예는 대입의 과정에서 자동 형 변환이 일어나는 경우입니다.1
2int num1 = 129
char result = num1
num1 은 int 형으로 선언이 되었지만 char 자료형에 할당됨에 따라 4바이트에서 1바이트로 그 크기가 줄어들게 됩니다.
이 경우에는 최상위 바이트의 손실이 일어나게 되며 이 경우 00000000 00000000 00000000 10000001 에서 10000001 로 바뀌게 되어 부호가 바뀌게 되는 문제가 생깁니다.
다음은 강제 형 변환 의 예를 살펴봅시다.1
2
3
4
5int num1 = 5
int num2 = 10
double result
result = (double)num1/num2
위 예는 num1과 num2의 연산을 통해 얻은 0.5를 double로 강제 형 변환 시켜주어 result에 할당하는 예를 보여줍니다.
이처럼 (자료형) 키워드를 앞에 붙여줌으로써 강제로 해당 자료형을 바꾸어 줄 수 있습니다.
Comments