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

%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-09-39

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

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

%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-11-27%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-11-51

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

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

%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-32-21%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-32-43

답글 남기기

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