02.16
1. 자바의 실수 표현 원리
자바는 실수를 표현할 때 부동 소수점(Floating Point) 방식을 사용한다.
1) 고정 소수점 vs 부동 소수점
- 고정 소수점: 32비트 중 1비트는 부호, 15비트는 정수, 16비트는 소수 등으로 자릿수를 딱 정해놓고 쓰는 방식. 구현은 단순하지만, 표현할 수 있는 수의 범위가 좁아서 잘 쓰지 않는다.
- 부동 소수점: 소수점의 위치를 고정하지 않고 '떠다니게(Floating)' 만든다. **지수부(Exponent)**와 **가수부(Mantissa)**로 나누어 표현하며, 같은 비트 수라도 정수형보다 훨씬 넓은 범위를 표현할 수 있다.
2) 저장 구조 (32비트 float 기준)
- 부호 비트 (1 bit): 양수면 0, 음수면 1.
- 지수부 (8 bits): 소수점의 위치를 결정한다. (2의 몇 승인지)
- 가수부 (23 bits): 실제 유효 숫자를 저장한다.
3) 변환 과정 예시 10진수 실수를 컴퓨터에 저장하는 과정은 다음과 같다.
- 2진수 변환: 먼저 정수부와 소수부를 각각 2진수로 바꾼다.
- 정규화 (Normalization): 1.xxxxx * 2^n 형태로 소수점을 이동시킨다. (가장 앞을 무조건 1로 맞춤)
- 예: 101.101 (2진수) -> 1.01101 * 2^2
- 지수부 저장 (Bias): 지수 n에 **127(Bias)**을 더해서 저장한다. (음수 지수를 표현하기 위함)
- 위 예시에서 지수는 2이므로, 2 + 127 = 129를 2진수로 바꿔 지수부에 넣는다.
- 가수부 저장: 정규화된 결과(1.01101)에서 맨 앞의 1과 점(.)을 떼고 나머지 01101...만 가수부에 채워 넣는다. (어차피 맨 앞은 무조건 1이니까 저장 공간을 아끼기 위함)
'개발 공부 > 자바' 카테고리의 다른 글
| 코딩 테스트에서 Short가 오히려 독이 될 수 있는 상황(JVM 내부 동작) (0) | 2026.03.25 |
|---|---|
| 자바 공부 일지 (면접 질문 위주) (0) | 2026.02.16 |
| 모든 클래스의 조상: Object 클래스 핵심 정리 (0) | 2025.12.03 |
| Java의 다형성 완전 정복 (0) | 2025.09.25 |
| 자바 면접 질문2 (0) | 2025.09.24 |