Skip to the content.

ASCII 코드란?

미국 표준 협회(ASA)에서는 정보통신을 할 때 문자를 주고받기 위해 알파벳 대소문자와 숫자, 그리고 몇몇 특수기호들에 번호를 하나씩 붙였다. 이것을 ASCII(아스키) 코드라고 한다. ASCII 코드표를 보면 각 문자에 대응하는 숫자가 무엇인지 확인할 수 있다.

ASCII 코드표 (Google 검색)

컴퓨터는 모든 정보를 0과 1로만 표현할 수 있기 때문에, ‘A’나 ‘+’ 같은 문자들도 모두 어떤 정수 값으로 표현되어 컴퓨터에 저장되어야만 한다. 이때 사용되는 것이 바로 ASCII 코드이다. C언어에서도 각 문자가 그에 대응하는 ASCII 코드 값을 가진다. 예를 들어 ‘A’라는 문자의 ASCII 값은 65이다. 따라서 C에서 'A'는 65와 같은 말이다. 정말로 그런지 확인해보기 위해 다음 코드를 실행해보자.

printf("%c\n", 'A');  // A  출력
printf("%d\n", 'A');  // 65 출력
printf("%c\n", 65);   // A  출력
printf("%d\n", 65);   // 65 출력

컴퓨터 상에서 'A'는 그저 65라는 한 숫자에 불과하다. 그걸 출력할 때 %c로 출력하냐, %d로 출력하냐에 따라 'A'가 출력되냐, 65가 출력되냐가 결정되는 것일 뿐이다.

문자 형태의 숫자

0~9까지의 숫자들도 어쨌든 문자이기 때문에 자기만의 아스키 값을 가지고 있다. 그런데 문자 '0', '1', '2' 등등의 아스키 값이 0, 1, 2가 되는 것은 아니다. 다음 예제를 통해 확인해보자. 무슨 값이 출력되는가?

printf("%d %d %d\n", '0', '1', '2');

문자 '0'은 48이라는 ASCII 값을 가지고, 문자 '1'은 그 다음 수인 49, … 이런 식이다. 따라서 문자 형태의 숫자(예: '3')를 정수로 바꿔주려면 48을 빼야 한다. (예: '3' - 48)

printf("%d %d %d\n", '0' - 48, '1' - 48, '2' - 48);

아니면, '0'이 48과 같은 말이므로 '0' 자체를 빼주어도 된다. 그러면 '0'의 ASCII 값이 무엇인지 몰라도 같은 작업을 할 수 있다.

printf("%d %d %d\n", '0' - '0', '1' - '0', '2' - '0');

퀴즈!

다음을 실행하면 무엇이 출력될까?

printf("%d\n", 'D' - 'A');
printf("%c\n", 'A' + 3);