컴퓨터의 데이터 표현
문자 인코딩의 발전: ASCII에서 Unicode와 UTF-8까지
'A' = 65(0x41), 'a' = 97(0x61), '0' = 48(0x30)).'가' = U+AC00)를 부여한 국제 표준 사전입니다.실수 표현의 표준: IEEE 754 부동소수점 (Floating-Point)
실수를 형태로 정규화(Normalization)하여 소수점의 위치를 유동적으로 이동시키며 넓은 범위의 수를 표현합니다.
float) 구조:double): 부호 1비트 + 지수부 11비트(바이어스 1023) + 가수부 52비트로 구성되어 유효숫자 약 15~17자리의 높은 정밀도를 제공합니다.1) 부호 비트 결정: 음수이므로 부호 비트 S = 1입니다.
2) 절댓값 13.625를 2진수로 변환:
정수부 13 = 8 + 4 + 1 = 1101₂
소수부 0.625 = 0.5(2⁻¹) + 0.125(2⁻³) = .101₂
따라서 13.625₁₀ = 1101.101₂입니다.
3) 정규화(소수점 앞을 1 하나로 만듦):
1101.101₂ = 1.101101₂ × 2³ (실제 지수 e = 3)
4) 지수부(8비트) 계산: Bias 127을 더하면 E = 3 + 127 = 130 = 10000010₂.
5) 가수부(23비트) 결정: 정수부 1을 생략한 소수점 이하 101101 뒤에 0을 17개 채웁니다.
결과: 1 | 10000010 | 10110100000000000000000
부동소수점 반올림 오차(Round-off Error)와 실무 해결책
0.1 + 0.2 == 0.3이 False가 될까?0.1 + 0.2 = 0.30000000000000004가 됩니다.a == b 대신 두 수의 차이가 매우 작은 허용 오차(Epsilon) 이내인지 확인하는 abs(a - b) < 1e-9 방식을 사용해야 합니다.float/double 사용이 엄격히 금지되며, 정수형(센트/원 단위 long)으로 환산하거나 Python Decimal, Java BigDecimal 같은 10진 고정소수점 연산 객체를 사용합니다.핵심 요약
- ✓UTF-8은 가변 길이(1~4바이트) 유니코드 인코딩으로 영문은 1바이트(ASCII 호환), 한글은 3바이트로 표현한다.
- ✓IEEE 754 단정밀도(32비트)는 부호(1비트), 지수부(8비트, Bias 127), 가수부(23비트, 묵시적 1 생략)로 구성된다.
- ✓0.1 같은 10진 소수는 2진수 변환 시 무한소수가 되어 부동소수점 반올림 오차(Round-off Error)를 유발한다.
- ✓실수 비교 시에는 == 대신 epsilon(1e-9) 오차 범위를 비교하고, 금융 계산에는 Decimal/정수 연산을 사용해야 한다.