논리적 오류
우리가 우리가 변수와 실수 그리고 자료형에 대해서 이해하지 못하면 직접 프로그램을 만들고 실행해 보았을때 생각하지 못한 다른 값이 출력되거나 오류가 발생할 수 있습니다.
아래의 코드를 직접 작성하고 실행해 봅시다.
#include <stdio.h> main () { int max = 2147483647; printf ( "%d\n", max); max = max + 1; printf ( "%d\n", max); }
실행결과
위 프로그램을 실행하면 논리적 오류가 발생합니다.
- 4행에서 int형 변수 'max'에 저장할 수 있는 최대 숫자인 2,147,483,647을 저장하였습니다.
max – 변수는 ‘max’ 말고도 내가 원하는 글자를 변수로 지정해 줄 수 있습니다. (예를 들어 ‘max’를 ‘a’나 ‘point’로 바꿔도 결과 값은 똑같이 출력됩니다.) 자세한 사항은 ‘변수명 지정’ 토픽에 나와 있습니다.
- 6행에서 4행의 값에 1을 더하면 저장 가능한 수의 범위를 넘게되어 오버플로가 발생합니다. 따라서 더 큰 정수를 저장하려면 자료형인 long long int(int보다 표현범위가 높다.)을 이용하여 'max'를 선언해야 합니다.
(예시: long long int max;)
오버플로 – 프로그래밍에서, 메모리 용량을 넘어선 값이 들어가 생기는 오류.
아스키코드
정도통신을 위해 미국표준협회 에서 개발한 것으로, 알파벳과 아라비아 숫자, 그리고 특수문자를 표현하는 2진수 코드 체계입니다. 숫자로 128개의 문자를 표현하며 메모리에 저장될 때는숫자(0~127)로 변환되어 저장합니다.
아스키코드를 사용하는 문자형(char) 변수의 경우, 문자 상수를 저장하거나 문자 상수에 해당하는 아스키코드(ASCII code) 값을 저장할 수 있습니다.
아래의 코드를 직접 작성하고 실행해 봅시다.
#include <stdio.h> main () { char a = 'A'; char b = a + 1; printf ( "ASCII [%d] = %c \n", a, a); printf ( "ASCII [%d] = %c \n", b, b); return 0; }
실행결과
위 프로그램을 실행하면 아스키코드에 해당하는 문자가 출력됩니다.
- 4행에서 문자형 변수 a에 ‘A’라는 문자를 저장했습니다. 그런데 ‘A’의 아스키코드 값이 65이므로 실제 a에는 65가 저장된 것이죠. 따라서 5행에서는 b에는 66이 저장됩니다.
- 6행과 7행처럼 이러한 변수 값을 출력할 때, printf() 함수 내부의 서식을 정수(%d)와 문자(%c)로 각각 지정하면 그에 맞는 형태로 변환되어 출력됩니다.컴퓨터 내부에서 문자 ‘A’와 10진수 65는 같은 값으로 저장되는데, 서식 ‘%d’와 ‘%c’ 를 사용하면 10진수나 문자로 출력할수 있습니다.
(%d와 %c에 대한 자세한 설명은 '입력과 출력' 토픽에서 나옵니다.)
위 프로그램은 문자형 변수를 이용하여 덧셈을 수행하는 예제입니다. 문자는 각 문자에 해당하는 아스키코드 값(정수)으로 바뀌어 문자형 변수에 저장되며 이를 이용하면 출력되는 서식을 어떻게 지정하는가에 따라 문자를 숫자로, 숫자를 문자로 출력하게 할 수 있습니다.(즉 %d는 문자'A'를 65로 출력하고 %c는 문자'A'를 그대로 출력합니다.)
다음 토픽에서는 문자열형 변수와 논리변수에 대해 배워 봅시다.