Contents

조회 수 1356 추천 수 0 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
book_7218.png


1.4.2 정수형과 실수형 메모리의 형태

정수형과 실수형의 데이터 타입을 이해하기 위한 간단한 예를 들어 보자. 인간은 5와 5.0을 같은 것으로 취급한다. 그리고 두 수를 함께 계산을 하더라도 별 무리 없이 계산된다. 이것은 인간이 자료에 대한 형태를 자동으로 판단한 후 계산하기 때문이다.

하지만 기계는 5와 5.0을 전혀 다른 것으로 취급한다. 기계는 5.0을 표현하기 위해서 훨씬 많은 노력을 기울여야 한다. 5.0은 이진화와 정규화의 과정을 거쳐서 2의 지수법으로 변환한 뒤 메모리에 적재해야 한다. 물론 정수 5는 단순히 2진 변환법을 사용하면 된다.

□ 정수의 메모리 변환법
◇ 정수(Integral Number) : 5
◇ 정수형 변환: 00000000 00000000 00000000 0000 0101(2)

정수 5의 경우에는 단순한 2진법을 사용하면 되지만, 실수 5.0은 다음의 IEEE Floating-Point 표준 변환법을 따르고 있다.

□ 자바에서 사용하는 실수형 비트조합의 규칙
◇ IEEE Standard for Binary Floating-Point Arithmetic, ANSI/IEEE Standard 754-1985

먼저 부동 소수점 5.0을 이진화한 후 2의 지수법으로 정규화를 해야 한다. 이진화와 정규화는 다음과 같다.

□ 부동소수점 수의 메모리 변환법
◇ 부동소수점 수(Floating Point Number): 5.0
◇ 이진화: 101.0
◇ 정규화: 1.01 * 2의 2승(1.xxx가 되도록 변환한다)

정규화까지 끝났다면 부호부, 지수부, 가수부를 각각 계산해주어야 한다. 부호부의 경우 양수이면 0을, 음수이면 1로 계산하면 된다. 그리고 지수부는 지수승에 127을 더하면 된다. 마지막으로 가수부는 소수점 이하를 그대로 사용하면 된다. 부호부, 지수부, 가수부의 계산 결과는 다음과 같다.

□ 부호부, 지수부, 가수부의 계산 결과
◇ 부호부: 0(양수)
◇ 지수부: 129 = 2(승) + 127
◇ 가수부: 01

☞ 127의 의미
위의 지수승에 127을 더하는 것은 2의 보수 표현과 관련이 있다. 2의 보수를 사용하는 이유는 뺄셈을 쉽게 하기 위해서이다. 더 정확하게 말하면 음수를 2의 보수로 표현해두면 덧셈 연산으로 뺄셈 연산을 할 수 있기 때문이다. 이것은 CPU에서 가산기만으로 뺄셈을 할 수 있다는 의미가 된다. 그래서 2의 보수표현을 사용하는 것이다. 여기서 2의 보수법을 언급하는 이유는 지수승의 8비트를 표현할 때 2의 보수법을 사용하지 않기 때문이다. 지수승은 음수승과 양수승이 있을 수 있다. 위의 경우에는 양수의 승이지만 음수의 승이 나올 수도 있다. 만약 음수의 승일 경우 지수승의 초기값이 0으로 세팅되어 있으면 문제가 된다. 그래서 127을 더해서 중간값으로 만들어 두고 음수는 빼고 양수는 더해서 지수승을 표현하는 것이다.


이제 부동 소수점의 비트조합을 알아야만 부호부, 지수부, 가수부를 이용해서 비트를 조합할 것이다. 부동 소수점의 비트조합은 다음과 같다.

□ 부동 소수점의 비트조합
◇ float형의 비트(32) = 부호부(1) + 지수부(8) + 가수부(23)
◇ double형의 비트(64) = 부호부(1) + 지수부(11) + 가수부(52)

float형의 비트조합으로 부호부, 지수부, 가수부를 대입해보면 다음과 같다.

□ float형의 비트 조합하기
◇ float형 변환
― 0(부호부) 10000001(지수부) 0100000000000000000000(가수부)
◇ 8비트씩 묶음
― 01000000 10100000 00000000 00000000(2)
◇ 16진수로 변환
― 40 A0 00 00(16)

□ IEEE Floating-Point Standard
◇ 이 규칙은 자바에서만 통용되는 것은 아니다. 일반 C에서도 이와 같은 방법을 사용한다.

5와 5.0은 데이터의 형태가 다르기 때문에 메모리에 적재되는 형태가 다르다. 즉 비트의 조합이 다른 것이다. 이러한 형태를 구분 짓는 기준이 바로 데이터 타입(Data Type)이다.

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
20 Java 1.6.2 할당의 법칙 IT장인 2013.11.21 379
19 Java 1.6.1 데이터 타입과 변수, 상수 IT장인 2013.11.21 445
18 Java 1.5.3 상수의 의미 IT장인 2013.11.21 571
17 Java 1.5.2 변수의 의미 IT장인 2013.11.21 385
16 Java 1.5.1 데이터 타입의 목적 IT장인 2013.11.21 329
15 Java 1.4.5 그 외 데이터 타입 IT장인 2013.11.21 66444
14 Java 1.4.4 정수형과 실수형 데이터 타입 IT장인 2013.11.21 592
13 Java 1.4.3 정수형과 실수형의 계산 IT장인 2013.11.21 526
» Java 1.4.2 정수형과 실수형 메모리의 형태 IT장인 2013.11.21 1356
11 Java 1.4.1 데이터 타입의 분류 IT장인 2013.11.21 459
10 Java 1.3.3 메모리에 들어가는 데이터 IT장인 2013.11.21 486
9 Java 1.3.2 변수를 이용한 메모리 접근 IT장인 2013.11.21 467
Board Pagination Prev 1 2 3 4 5 6 Next
/ 6