2.4 정수 자료형과 숫자 상수    [DOC]    [SMTS]

 표 2.1.1에서 분류한 것과 같이 정수형은 크게 다섯 가지(char, short, int, long, long long)의 자료형이 있으며 바이트 수가 클수록 숫자 데이터의 범위도 커지게 된다. 정수형 변수에는 정수형 상수를 저장할 수 있으며 소수점이 없는 숫자는 정수형 상수이다.


 예를 들어 부호가 있는 int 형 변수 ia 를 숫자 0으로 초기화하려면 다음과 같이 하면 된다.


int ia = 0;

이후에는 ia라는 int형 변수를 '사용'하여 정수 값을 저장하거나 산술 연산을 수행할 수 있다.


int ia = 0;
ia = 12 * 34; // *는 곱셈 연산자임

 C언어에서 정수를 표현할 때 0으로 시작되는숫자는 8진수이고, 0x로 시작하는 숫자는 16진수라는 것이다. 예를 들어서 123은 그냥 10진수 123이지만 0123 이라고 입력하면 8진수 123이기 때문에 10진수로 변환하면 83이다. 그리고 0x123은 16진수 123이기 때문에 10진수로 변환하면 291이 된다. 이것을 다음 표에 정리하였다.


[표 2.2.1] 숫자상수의 접두어 예

숫자 상수

십진수값

비고

123

123

10진수

0123

83

8진수

0x123

291

16진수

0b1110

14

2진수 (gcc에서 지원, C++14)


0123의 경우 십진수 123이라고 오해하기 쉬운데 0으로 시작하는 수는 8진수로 간주된다는 사실을 유의해야 한다.


 다음 예를 실행시켜보자.


ex02-02.c

#include <stdio.h>

int main() {
char ca = 123;
unsigned int uia = 0123;
long la = 0x123;

printf("%d, %d, %d", ca, uia, la);
}

실행 결과

123, 83, 291

이 결과로부터 8진수 123은 십진수 83이고 16진수 123은 십진수 291과 같다는 사실을 알 수 있다.

 정수형 상수는 기본적으로 int형으로 간주되므로 내부적으로 저장하는데 4 byte(혹은 2 byte)가 소요가 된다. 만약 숫자 상수를 특정한 자료형으로 지정해 주고 싶다면 접미어를 붙여서 그 데이터형을 지정할 수 있는데 U(혹은 u)를 붙이면 unsigned int형이고 l(혹은 L)은 long형, ul(혹은 UL)은 unsigned long형임을 나타낸다.


표 2.2.2 숫자상수의 자료형을 지정하는 접미어들

접미어

자료형

예제

u/U

unsigned int

37u, 123U
l/L

long

12l, 12L
ul/UL

unsigned long

89ul, 89UL

예를 들면 다음과 같다.


unsigned int uia = 0u;
unsigned long ula = 123ul;

하지만 보통은 숫자 상수는 대입하려는 변수의 자료형에 자동으로 변환되어 저장되므로 굳이 이렇게 일일이 자료형에 맞추어 접미어를 붙여줄 필요는 없다. 즉,


unsigned long ula = 123;

이라고 초기화하여도 123이라는 int형 상수는 자동으로 unsigned long 형으로 변환된 후 변수 ula에 저장된다.


 만약 숫자상수를 short 형이나 unsigned char 형으로 지정하고 싶다면 다음과 같이 해야 한다.


short sa = (short)1;
unsigned char uca = (unsigned char)123;

이와 같이 숫자 상수 앞에 (자료형)을 붙여 자료형을 강제로 변환하는 것을 형변환(casting)이라고 한다. 하지만 이 경우도 아래와 같이 할 수 있다.


short sa = 1;
unsigned char uca = 123;

이렇게 해도 자동으로 형변환이 일어나기 때문에 문제가 없다.


'프로그래밍언어.Lib > C,C++' 카테고리의 다른 글

2.6 문자 상수  (0) 2016.03.28
2.5 실수 자료형과 실수 상수  (0) 2016.03.28
1.9 2진수와 16진수  (0) 2016.03.07
1.8 atom 설치 / 첫 프로그램 실행하기  (2) 2016.03.07
1.7 windows에서 mingw 설치하기  (0) 2016.03.07
Posted by 살레시오

댓글을 달아 주세요