2015년 4월 17일 금요일

C/C++의 정수형 자료형

_(1) 정수형 상수 

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

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

---------------------------------------------------------------------------
int ia = 0;
---------------------------------------------------------------------------

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

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

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



접미어
자료형
예제
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;
---------------------------------------------------------------------------

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



숫자 상수
십진수값
비고
123
123
10진수
0123
83
8진수
0x123
291
16진수
0b1110
14
2진수(gcc에서 지원, C++14)

(2) 문자 상수

  C/C++ 언어에서는 정수형 변수에 정수뿐만 아니라 문자를 저장할 수 있으며 특별히 char형과 int형은 문자를 저장하는 목적으로도 자주 사용된다. 문자상수는 작은 따옴표(‘’)를 이용하여 표현되며 예를 들면 ‘a’, ‘+’, ‘0’ 등이 있다. 문자상수는 아스키(ASCII)코드라는 고유의 상수값이 정해져 있는데 다음 표에 몇몇 문자상수와 아스키코드값을 수록하였다.



종류
문자와 ASCII 코드
숫자 (문자)
ASCII 코드
‘0’
48
‘1’
49
‘2’
50
‘9’
57
알파벳 대문자
ASCII 코드
‘A’
65
‘B’
66
‘C’
67
...
‘Z’
90
알파벳 소문자
ASCII 코드
‘a’
97
‘b’
98
‘c’
99
...
‘z’
112
특수문자
ASCII 코드
‘&’
38
‘*’
42
‘+’
43



  char형은 크기가 1바이트이므로 부호 없는 unsigned char 변수인 경우 0부터 255까지의 작은 숫자를 저장할 수 있으며 short형은 2바이트로 부호 없는 숫자의 경우 0부터 65,535까지 저장할 수 있다. 만약 char형 변에 문자상수, 예를 들어서 ‘a’가 저장되면 내부적으로는 97이라는 숫자가 저장된다는 것을 알아야 한다.



bit7
bit6
bit5
bit4
bit3
bit2
bit1
bit0
‘a’ (97)
0
1
1
0
0
0
0
1
  부호가 있는 정수형 데이터는 음수를 2의 보수로 저장하기 때문에 저장범위가 char형은 –128~+127이 되고 short형은 –32,768~+32,767이 된다.
[#00008]

댓글 없음:

댓글 쓰기