[c언어 기초]

우리가 아는 C언어

논리적 오류와 아스키코드

변수와 실수 그리고 자료형의 이해

논리적 오류

우리가 우리가 변수와 실수 그리고 자료형에 대해서 이해하지 못하면 직접 프로그램을 만들고 실행해 보았을때 생각하지 못한 다른 값이 출력되거나 오류가 발생할 수 있습니다. 

 아래의 코드를 직접 작성하고 실행해 봅시다.

#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'를 그대로 출력합니다.)

다음 토픽에서는 문자열형 변수와 논리변수에 대해 배워 봅시다.

댓글

댓글 본문
  1. ascill 120 number, a - 65
    max = 2223, if you add number in here
    you need to long long int max;
  2. 모모땅
    오오
  3. Noir
    잘봤습니다
  4. 호두
    고맙습니다.
  5. 어흥zz
    감사합니다!