본문 바로가기
프로그래밍언어/C언어

상수란 무엇인가? - 리터럴 상수

by J코딩 2021. 8. 31.
반응형

상수에는 크게 두 종류가 있습니다.

  • 리터럴(Literal) 상수 - 글자 그대로 의미가 있어서 이름이 없는 상수
  • 심볼릭(Symbolic) 상수 - 상수를 기호화하여 변수처럼 이름을 지어 쓰는 상수

여기에서는 먼저 리터럴 상수에 대해서 알아보겠습니다.

리터럴 상수

여러분은 1, 2, 3, 4, a, b, c 등과 같이 숫자나 문자를 읽을 대 직감적으로 숫자나 문자 그대로의 개념을 부여합니다. 즉, 읽은 그대로의 의미가 있는데 이러한 것들을 리터럴(Literal) 상수라고 합니다. 리터럴 상수의 종류에는 1. 정수형 상수, 2. 실수형 상수, 3. 문자 상수, 4. 문자열 상수가 있습니다.

 

1. 소수점이 없는 숫자 상수를 정수형 상수라 한다.

C언어에서 정수형 상수는 10진수, 15진수, 8진수의 형태로 표현합니다. 그럼 10진수, 30, 16진수 30, 8진수 30을 어떻게 구분할 수 있을까요? 16진수는 0x를 8진수는 0을 사용하여 정수형 숫자를 구분합니다. 다음표에 정수형 상수들의 출력 서식, 표현 방법, 사용 예를 설명하고 있으므로 참고하길 바랍니다.

정수형 상수 출력 서식 표현 방법
10진수 %d 10, 20, 30,... int a=30;
printf("%d",a);
16진수 %x 0x12, 0x20, x030,... int b=30;
printf("%x",b);
8진수 %o 012, 020, 030 int c=30;
printf("%o",c);

다음 예제를 통해 간단히 알아보겠습니다.

5행에서 10진수 정수형 상수, 10, 20, 10+20을 서식 문자 %d를 통해 출력하고 있습니다.

8행에서 16진수 정수형 상수 0x10, 0x20, 0x10+0x20을 서식 문자 %x를 통해 출력하고 있습니다.

여기서 잊지 말아야 할 것은 16진수를 표현할 때는 반드시 0x를 붙여야 합니다. 그래야, 16진수로 인식합니다.

11행 8진수 정수형 상수 010, 020, 010+020을 서식 문자 %o를 통해 출력하고 있습니다.

8진수를 표현 할 때도 마찬가지로 반드시 숫자 앞에 0을 붙여야 합니다. 그래야 8진수로 인식합니다.

 

2. 소수점이 있는 숫자 상수를 실수형 상수라 한다.

실수형 상수란 123.45와 같이 소수점을 포함하는 상수를 의미합니다. 예제를 가지고 간단히 알아보겠습니다.

5행에서 시수형 상수 3.1, 4.1, 3.1+4.1을 서식 문자 %lf로 출력하고 있습니다. 실수형 상수를 printf() 함수로 출력하려면 %lf를 사용한다는 것을 알아 둡시다.

 

3. 작은따옴표로 묶은 문자 하나를 문자 상수라 한다.

문자 상수란 작은따옴표(' ')로 묶은 문자 하나를 의미합니다. 예는 A, B, a, b, & , *, + 등과 같이 키보드로 표현할 수 있는 영문자와 숫자, 특수 기호들입니다. 다음 예제를 통해 간단히 알아보겠습니다.

3행에서 알파벳 a, b, c를 서식 문자 %c로 출력하고 있습니다. 11행에서 특수 기호 !, @, #을 서식 문자 %c로 출력하고 있습니다.

왜 알파벳 또는 특수 기호가 상수인지가 궁금해 질 수 있습니다. 그것은 알파벳이나, 특수 기호는 ASCII코드라는 것이 있습니다. 아래에 ASCII코드 표를 보겠습니다.

ASCII 코드표

알파벳 a, b, c 그리고 특수 기호 !, @, #이 각각 10진수와 16진수로 얼마로 표현되어 있는지 위 표와 예제를 통해서 알 수 있습니다.(예제 5,6,13,15행)

컴퓨터에서 사용되는 데이터는 0과 1의 조합인 숫자 형태로 표현합니다. 따라서 프로그램에서 사용되는 문자들은 내부적으로 숫자 코드로 인식되기 대문에 문자와 숫자를 연결하는 방버이 필요합니다. 이러한 요구에 의해서 미국표준협회는 ASCII코드를 만들어서 문자 표현에 대한 표준을 정했고, 그로 인해 문자 상수가 10진수와 16진수로 표현되고 있습니다.

 

4. 큰따옴표로 묶은 하나 이상의 문자로 구성된 문자열을 문자열 상수라 한다.

문자열 상수란 큰따옴표(" ")로 묶은 하나 이상의 문자로 구성된 문자열을 의미합니다. 다음 예제를 통해 간단히 알아보겠습니다.

4행에서 큰따옴표 안에 있는 A는 서식 문자 %s로 출력 가능한 문자열 상수로 출력하고 있습니다.

6행에서 큰따옴표 안에 있는 10+10은 서식 문자 %s로 출력 가능한 문자열 상수로 출력하고 있습니다. 만약 10+10이 큰따옴표로 감싸지 않았다면 10+10 을 더하기 때문에 10진수 정수 20이 되므로, %d로 출력 가능한 정수형 상수로 출력해야 합니다.

8행에서 큰따옴표 안에 메타버스 뜻 은 서식 문자 %s로 출력 가능한 문자열 상수로 출력하고 있습니다.

컴파일러는 큰따옴표로 묶은 문자열 상수를 저장할 때 문자열 상수 맨 마지막에 문자열의 끝을 알리는 종료 문자 \0(20진수 0을 의미)을 자동으로 추가합니다. 이것을 null 문자라고 합니다.

그리고 4행을 보면 A는 한 개의 문자이지만 큰따옴표로 둘러싸여 있습니다. 그렇다면, A는 문자 상수일까요? 문자열 상수일까요? 결론은 문자열 상수입니다. 이유는 큰따옴표를 인식한 컴파일러가 A 끝에 종료 문자 (\0)을 자동으로 추가해서 서식 문자 %s로 출력하도록 하기 때문입니다. 문자열 상수 A를 %c로 출력해 보세요 출력되지 않음을 알 수 있습니다.

https://jcoding7.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%96%B8%EC%96%B4%EB%A5%BC-%EB%B2%88%EC%97%AD%ED%95%98%EB%8B%A4-%EC%BB%B4%ED%8C%8C%EC%9D%BC%EB%9F%AC-vs-%EC%9D%B8%ED%84%B0%ED%94%84%EB%A6%AC%ED%84%B0

 

프로그래밍언어를 번역하다 컴파일러 vs 인터프리터

앞서 프로그래밍언어는 컴퓨터와의 소통을 위해 만들어진 언어라고 하였습니다. https://jcoding7.tistory.com/entry/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%96%B8%EC%96%B4-%EC%99%9C-%EB%B0%B0%EC%9..

jcoding7.tistory.com

 

반응형

댓글