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