14 – 변수 (고정소수점)

고정소수점형은 정수를 의미하는 것으로, int, short int, long int, unsigned int 등이 있고 표현할 수 있는 값의 범위는 시스템에 따라 차이가 있지만 리눅스 시스템에서는 다음과 같다고 보면 된다. 바이트 폭의 경우에는 해당 데이터형의 변수를 선언할 때 배정되는 메모리의 크기를 말한다.

데이터형 / 바이트 폭 / 포현 범위 / 상수 표현

int / 4 / -2147483648 ~ 2147483648

short int / 2 / -32768 ~ 32767 / 77

long int / 4 / -2147483648 ~ 2147483647 / 77L

unsigned int / 4 / 0 ~ 4294967295 / 77U

이러한 데이터 형의 크기는 sizeof 연산자를 이용해 적접 확인할 수 있는데, 아래 프로그램처럼 구현해서 확인할 수 있다.

%e1%84%89%e1%85%b3%e1%84%8f%e1%85%b3%e1%84%85%e1%85%b5%e1%86%ab%e1%84%89%e1%85%a3%e1%86%ba-2017-02-08-%e1%84%8b%e1%85%a9%e1%84%92%e1%85%ae-4-08-49

도중에 생긴 warning의 경우에는 sizeof가 출력하는 long unsigned int를 그대로 int로 받아서 그러는 건데, 문제는 없다.

이런 데이터 형의 크기는 왜 알아야 하냐면, 데이터 형의 크기에 따라 입력 및 출력할 수 있는 영역이 정해지고, 이를 고려하지 않으면 문제가 발생한다. 문제가 발생하는 프로그램의 예제를 다음과 같이 짜 보았다. int형의 표현할 수 있는 범위를 넘어선 연산을 진행해보도록 하겠다. 연산 결과로는 3000000000이 나와야 하지만, int형의 표현 범위를 넘어섰기 때문에 엉뚱한 결과가 나왔다. 이렇게 변수의 범위값을 넘어가는 상황을 오버플로우라고 하는데, 이상한 값을 출력하고 한다.

컴파일 했을 때, 오류에 overflow in expression이라고 나와있는데, 이것이 오버플로우가 된다는 경고이다. 실행은 되는데 실제로 실행하면 이상한 값을 내는 것이다.

그리고 변수를 선언할 때 값을 변수에 넣어서도 할 수 있다.

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.