상수(리터럴 상수)

정의

  • 항상 고정된 값을 갖는 자료
  • 변수에 할당되는 기본 자료형의 값들이 상수들이다.
  • 나중에 배울 상수 변수와는 다른 개념

표현

  • 자료형에 따라 정해진 문법에 따라 값을 표기한다.
1
2
3
4
char  a   = 'A';
int   b   = 123;
float c   = 1.2e-3;
char* str = "STRING";

상수의 종류

  • 정수형
  • 문자형
  • 실수형
  • 문자열형

정수형 상수

정수형 상수의 표현

  • C 언어에서는 10진수, 8진수, 16진수로 표현할 수 있다.
구분 표현법 예시
10진 상수 0~9 범위의 숫자를 사용한다.
숫자의 첫 자리는 0이 아니어야 한다.
10, -45
8진 상수 0~7 범위의 숫자를 사용한다.
숫자의 첫 자리는 0으로 시작해야 한다.
012, -055
16진 상수 0~9 와 a~f 를 함께 사용한다.
숫자의 첫 자리는 0x 또는 0X로 시작해야 한다.
0x10, -0x2d
unsigned 형 숫자 끝에 u 를 붙인다. 0xc3u, 017u
long 형 숫자 끝에 l 또는 L을 붙인다. (영문 엘) -45L, -0x2dL, -055L
1
2
3
4
5
6
7
8
9
10
11
12
// 10진수, 8진수, 16진수의 표현
int deci = 10;
printf("10진수 %d은 10진수로 %s 라고 표현합니다.\n", deci, "10");
>> 10진수 10 10진수로 10 라고 표현합니다.

int octal = 012;
printf("10진수 %d은 8진수로 %s 라고 표현합니다.\n", octal, "012");
>> 10진수 10 8진수로 012 라고 표현합니다.

int hexa_deci = 0xa;
printf("10진수 %d은 16진수로 %s 라고 표현합니다.\n", hexa_deci, "0xa");
>> 10진수 10 16진수로 0xa 라고 표현합니다.
1
2
3
4
5
6
7
8
9
// unsigned 형의 표현
printf("부호 없는 10진수 %d은 12진수로 %s 라고 표현합니다.\n", 0xc3u, "0xc3u");
>> 부호 없는 10진수 195 12진수로 0xc3u 라고 표현합니다.

printf("부호 없는 10진수 %d은 8진수로 %s 라고 표현합니다.\n", 017u, "017u");
>> 부호 없는 10진수 15 8진수로 017u 라고 표현합니다.

printf("대문자로 써도 됩니다. : %d, %s\n", 017U, "017U");
>> 대문자로 써도 됩니다. : 15, 017U
1
2
3
4
5
6
7
8
9
10
11
12
// long 형의 표현
printf("long 형 10진수 %d은 10진수로 %s 라고 표현합니다.\n", -45L, "-45L");
>> long  10진수 -45 10진수로 -45L 라고 표현합니다.

printf("long 형 10진수 %d은 8진수로 %s 라고 표현합니다.\n", -0x2dL, "-0x2dL");
>> long  10진수 -45 8진수로 -0x2dL 라고 표현합니다.

printf("long 형 10진수 %d은 12진수로 %s 라고 표현합니다.\n", -055L, "-055L");
>> long  10진수 -45 12진수로 -055L 라고 표현합니다.

printf("소문자로 써도 되나, 1과 구분하기 어려울 수 있습니다. : %d, %s\n", -055l, "-055l");
>> 소문자로 써도 되나, 1 구분하기 어려울  있습니다. : -45, -055l

정수형 상수의 출력 형식(포맷)

출력 형식 구분 10진수 상수값 출력값
%d 10진수 10 10
%o, %O 8진수 10 12
%#o, %#O 8진수 10 012
%x, %X 16진수 10 a
%#x, %#X 16진수 10 0xa
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int deci = 10;
printf("10진수 %s 은 10진수로 %d 입니다.\n", "10", deci);
>> 10진수 10  10진수로 10 입니다.

printf("10진수 %s 은 8진수로 %o 입니다.\n", "10", deci);
>> 10진수 10  8진수로 12 입니다.

printf("10진수 %s 은 8진수로 %#o 입니다. (8진수 형식)\n", "10", deci);
>> 10진수 10  8진수로 012 입니다. (8진수 형식)

printf("10진수 %s 은 16진수로 %x 입니다.\n", "10", deci);
>> 10진수 10  16진수로 a 입니다.

printf("10진수 %s 은 16진수로 %#x 입니다. (16진수 형식)", "10", deci);
>> 10진수 10  16진수로 0xa 입니다. (16진수 형식)

실수형 상수

실수형 상수의 표현

  • 실수형 상수는 아래의 총 4가지 형식으로 표현할 수 있다.
구분 표현법 예시
소수 형식 소수점을 사용하여 표현한다. 3.14, -12000.000
가수와 지수 형식 가수부를 10진수로, 지수부를 e를 이용해 표현한다. 314e-2, -12e+3
float 형 float 을 뜻하는 접미사 f 혹은 F 를 붙인다. 3.14f, 1.2E4F
long double 형 long double 을 뜻하는 접시하 l 혹은 L을 붙인다. 3.14l, 1.2E4L
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// (1) 소수 형식으로 표현
double decimal_format = 3.14;
printf("3.14 to decimal_format : %f\n", decimal_format);
>> 3.14 to decimal_format : 3.140000

// (2) 가수와 지수 형식으로 표현 (=지수 형식)
double exponential_format = 314e-2;
printf("3.14 to exponential_format : %f\n", exponential_format);
>> 3.14 to exponential_format : 3.140000
  
// (3) float 형
float float_value = 3.14f;
printf("3.14 to float : %e\n", float_value);
>> 3.14 to float : 3.140000e+00

// (4) long double 형
long double long_double_value = 3.14L;
printf("3.14 to long double : %Le\n", long_double_value);
>> 3.14 to long double : 3.140000e+00

문자형 상수

문자형 상수의 표현

  • 문자형 상수는 작은 따옴표(')로 묶인 1바이트 크기의 1개의 문자를 뜻한다.
  • 한글의 경우 1바이트가 넘어가므로 문자형 상수로 표현할 수 없다.
  • 백색문자(white space)의 경우 별도의 글에서 다시 소개한다.
구분 예시
영문자 ‘a’, ‘b’, ‘c’ … ‘X’, ‘Y’, ‘Z’
숫자 ‘0’, ‘1’, ‘2’ … ‘7’, ‘8’, ‘9’
기호 ’+’, ‘-‘, ‘@’ 등
백색문자 ‘\n’, ‘\r’, ‘\b’ 등
널(null) ‘\0’
1
2
3
4
5
6
7
8
9
10
11
char eng = 'a';
printf("char %s expression : %c\n", "eng", eng);
>> char eng expression : a

char digit = '1';
printf("char %s expression : %c\n", "digit", digit);
>> char digit expression : 1

char sign = '-';
printf("char %s expression : %c\n", "sign", sign);
>> char sign expression : -

문자열 상수

문자열 상수의 표현

  • 문자열 상수는 큰 따옴표(")로 묶인 일련의 문자를 뜻한다.
  • 문자열의 끝을 나타내기 위해 null 문자(\0)가 자동으로 추가된다. 이는 문자열 상수값이 메모리에 들어갈 때 자동적으로 추가되는 것이다.
  • 문자열 중간에 null 문자를 직접 넣으면, 출력시에 그 곳에서 문장이 끊긴다.
1
2
3
4
5
// 문자열 상수의 출력
char str[] = "abc";
printf("%s", str);

>> abc
1
2
3
4
// 문자열 중간에 null 문자가 있는 경우
printf("예를 들면 이렇\0게 되는 것입니다.\n");

>> 예를 들면 이렇

Reference

C 프로그래밍 (김형근, 곽덕훈, 정재화 공저)
C 프로그래밍 강의 (방송통신대 - 이병래)

Comments