본문 바로가기
프로그래밍_개발/C

C언어 개인노트#006

by Raffin 2020. 5. 11.
반응형
SMALL

논리적 오류

정해진 자료형의 범위를 넘어서면 어떻게 될까?

#include <stdio.h>
main ()
{
    int full = 2147483647;
    printf("%d\n", full);
    full = full + 1;
    printf("%d\n", full);
}

위와 같이 코드를 작성해보고 결과를 확인해보죠.

이렇게 전혀 다른 값이 나오는 것을 확인 할 수 있다.

 

int 형 변수 full 에 저장할 수 있는 최대 숫자는 2,147,483,647이다.

이 값에 1을 더하면 오버플로우가 발생하게 되고 이처럼 더 큰 정수를 저장하려면 long long int와 같은 자료형을 사용해서 full을 선언해야한다.

 

 

아스키코드

정보통신을 위해 미국표준협회에서 개발한 것으로, 알파벳과 아라비아 숫자, 그리고 특수문자를 표현하는 2진수 코드 체계다.

숫자로 128개의 문자를 표현하며 메모리에 저장될 때는 숫자 (0~127)로 변환되어 저장합니다.

 

#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;
}

 

위와 같이 코드로 작성을 해봅니다.

 

아래와 같은 결과를 출력하게 되는데, 이유가 무엇일까요?

char a = 'A'에서 a라는 문자형 변수에는 A라는 문자가 저장됨과 동시에 A의 아스키코드 값이 65이기 때문에 a에는 65가 저장된 것입니다.

문자형 변수 a에 1을 더한 문자형 변수 b는 아스키코드상에서 66이라는 값이 저장됩니다.

%d를 통해 정수로 출력이 되어 아스키코드상으로는 각각 65와 66으로 출력이 되었으며 그 값은 서식 %c에 의해 문자로 변환되었을때는 각각 A와 B로 출력이 됩니다.

 

반응형

'프로그래밍_개발 > C' 카테고리의 다른 글

C언어 개인노트#007  (0) 2020.05.11
C언어 개인노트#005  (0) 2020.05.07
C언어 개인노트#004  (0) 2020.05.07
C언어 개인노트#003  (0) 2020.05.07
C언어 개인노트#002  (0) 2020.05.07

댓글