C++ 데이터 타입 수정자 이해하기: signed, unsigned, long, short
C++은 char, int, double 데이터 타입에 수정자(modifier)를 앞에 붙일 수 있게 합니다. 수정자는 기본 타입의 의미를 변경해 다양한 상황에 더 정확히 맞도록 합니다.
데이터 타입 수정자는 다음과 같습니다.
- signed
- unsigned
- long
- short
signed, unsigned, long, short 수정자는 정수 기본 타입에 적용할 수 있습니다. 또한 signed와 unsigned는 char에, long은 double에 적용할 수 있습니다.
signed와 unsigned는 long 또는 short 수정자의 접두사로도 사용할 수 있습니다. 예: unsigned long int.
C++은 unsigned, short, long 정수를 선언하는 간편 표기법을 허용합니다. int 없이 unsigned, short, long 단어만 써도 자동으로 int를 의미합니다. 다음 두 문장 모두 부호 없는 정수 변수를 선언합니다.
unsigned x;
unsigned int y;
C++이 signed와 unsigned 정수 수정자를 어떻게 다르게 해석하는지 이해하려면 다음 짧은 프로그램을 실행해 보세요.
Live Demo
#include <iostream>
using namespace std;
/* 이 프로그램은 signed와 unsigned 정수의 차이를 보여줍니다. */
int main() {
short int i; // 부호 있는 short 정수
short unsigned int j; // 부호 없는 short 정수
j = 50000;
i = j;
cout << i << " " << j;
return 0;
}
이 프로그램을 실행하면:
-15536 50000
위 결과는 50,000을 표현하는 short unsigned 정수의 비트 패턴이 short(부호 있음)에서는 -15,536으로 해석되기 때문입니다.
C++의 타입 한정자(Type Qualifiers)
타입 한정자는 앞서오는 변수에 대한 추가 정보를 제공합니다.
| 번호 | 한정자 및 의미 |
| 1 | const const 타입의 객체는 프로그램 실행 중 변경될 수 없습니다. |
| 2 | volatile volatile 수정자는 변수의 값이 프로그램에서 명시적으로 지정하지 않은 방식으로 변경될 수 있음을 컴파일러에 알립니다. |
| 3 | restrict restrict로 한정된 포인터는 처음에 그것이 가리키는 객체에 접근하는 유일한 수단입니다. C99에서 restrict라는 새로운 타입 한정자가 추가되었습니다. |