C 언어에서 문자 산술(Character Arithmetic)은 문자에 덧셈, 뺄셈과 같은 산술 연산을 적용하는 기법입니다. 주로 문자열을 조작하거나 처리할 때 활용되며, C 프로그래밍에서 매우 유용하게 쓰이는 개념입니다.
문자 산술의 동작 원리
문자에 산술 연산을 수행하면, 컴파일러는 해당 문자를 자동으로 정수 값으로 변환합니다. 이때 사용되는 정수 값이 바로 각 문자에 할당된 ASCII 코드 값입니다. 예를 들어 소문자 'm'의 ASCII 값은 109입니다.
즉, 문자는 내부적으로 숫자로 취급되기 때문에 다음과 같은 연산이 가능합니다.
- 문자 + 정수 → 해당 ASCII 값에서 정수만큼 증가한 새로운 문자
- 문자 − 정수 → 해당 ASCII 값에서 정수만큼 감소한 새로운 문자
- 문자 − 문자 → 두 문자의 ASCII 값 차이 (정수)
C 언어 문자 산술 예제
다음은 C 언어에서 문자 산술을 사용하는 대표적인 예제 코드입니다.
#include <stdio.h>
int main(){
char s = 'm';
char t = 'z' - 'y';
printf("%d\n", s);
printf("%c\n", s);
printf("%d\n", (s+1));
printf("%c\n", (s+1));
printf("%d\n", (s-1));
printf("%c\n", (s-1));
printf("%d\n", t);
// printf("%c", t);
return 0;
}실행 결과
109 m 110 n 108 l 1
출력 결과 상세 분석
실행 결과를 하나씩 살펴보면 다음과 같습니다.
1. 문자 'm'의 출력
%d 서식 지정자로 출력하면 문자 'm'의 ASCII 값인 109가 출력되고, %c로 출력하면 문자 그대로 m이 출력됩니다.
2. s + 1 연산 결과
'm'(109)에 1을 더하면 110이 되며, 이는 ASCII 값으로 n에 해당합니다. 따라서 %d로는 110, %c로는 n이 출력됩니다.
3. s - 1 연산 결과
'm'(109)에서 1을 빼면 108이 되며, 이는 ASCII 값으로 l에 해당합니다. 따라서 %d로는 108, %c로는 l이 출력됩니다.
4. 문자 간 뺄셈 ('z' - 'y')
변수 t에는 'z'와 'y'의 ASCII 값 차이인 1이 저장됩니다. 두 문자의 차이는 정수이므로 %d로 출력해야 하며, 만약 %c로 출력하면 ASCII 값 1에 해당하는 제어 문자(SOH)가 표시되어 의미 있는 결과를 얻을 수 없습니다. 그래서 코드에서 해당 printf 문은 주석 처리되어 있습니다.
정리
C 언어에서 문자는 본질적으로 작은 크기의 정수(char 타입)이므로 산술 연산이 자유롭게 가능합니다. 이러한 문자 산술 특성을 활용하면 알파벳 순회, 대소문자 변환, 문자열 암호화(카이사르 암호 등)와 같은 다양한 프로그래밍 작업을 손쉽게 구현할 수 있습니다.