2025. 2. 8. 18:00ㆍ소프트웨어/기초
컴퓨터가 숫자를 표현하는 방식
컴퓨터는 우리가 사용하는 10진법(0~9까지의 숫자) 대신 2진법(0과 1만 사용)을 이용하여 숫자를 저장하고 연산합니다.
그렇다면, 컴퓨터가 어떻게 숫자를 표현하는지 알아보겠습니다.
1. 2진수 개념(0과 1) 간단히 소개
왜 컴퓨터는 2진수를 사용할까?
컴퓨터 내부에서는 전기 신호(ON/OFF)를 이용하여 데이터를 저장하고 처리합니다.
- ON(전압 있음) → 1
- OFF(전압 없음) → 0
이처럼 컴퓨터는 두 가지 상태만 구분할 수 있기 때문에 2진법(Binary System)을 사용합니다.
10진수 vs. 2진수
우리가 일반적으로 사용하는 10진법에서는 숫자를 다음과 같이 표현합니다.
여기서 기본(Base)는 10입니다.
반면, 2진법에서는 숫자를 0과 1의 조합으로 나타냅니다.
예를 들어, 10진수 13을 2진수로 변환하면:
즉, 10진법에서는 0~9까지의 숫자를 사용하지만, 2진법에서는 0과 1만 사용합니다.
2. 정수 표현 방식과 차이점
컴퓨터에서 숫자는 크게 정수(Integer)와 실수(Floating-Point)로 나뉩니다.
(1) 정수 표현 방식
정수는 고정된 비트 수를 사용하여 저장됩니다.
예를 들어, 8비트(1바이트) 정수는 다음과 같이 표현할 수 있습니다.
① 부호 없는 정수 (Unsigned Integer)
- 8비트(1바이트) 정수의 범위:
- 즉, 0 ~ 255까지 표현 가능
② 부호 있는 정수 (Signed Integer, 2의 보수 방식 사용)
- 8비트 정수의 범위:
- 즉, -128 ~ +127까지 표현 가능
⚠️ 2의 보수 방식: 모든 비트를 반전시킨 후 1을 더해 음수를 표현합니다.
예: -3을 8비트로 표현하는 과정
- 3의 2진수 표현: 00000011_{2}
- 비트 반전: 11111100_{2}
- +1 더하기: 11111101_{2} (이진수 -3)
2의 보수 방식의 장점
- 음수를 표현할 수 있으며, 기존 덧셈/뺄셈 연산을 동일한 방식으로 처리 가능
- 하드웨어에서 연산이 간단해져 속도가 빨라짐
(2) 정수 vs. 부동 소수점(실수)의 차이점
정수 (Integer) | 부동 소수점 (Floating-Point) | |
정확성 | 항상 정확한 값 저장 | 일부 실수는 근사값으로 저장됨 |
표현 범위 | 제한된 범위 내의 정수만 표현 가능 | 매우 큰 숫자와 작은 숫자를 표현 가능 |
메모리 사용량 | 일반적으로 4바이트(32비트) 또는 8바이트(64비트) | 4바이트(단정밀도) 또는 8바이트(배정밀도) |
사용 예시 | 카운트, 인덱스, 개수 계산 | 과학 계산, 그래픽 처리 |
정수와 부동 소수점의 차이를 이해하는 예제
# 정수 연산 (정확함)
print(2 + 3) # 출력: 5
# 부동 소수점 연산 (근사값)
print(0.1 + 0.2) # 출력: 0.30000000000000004
정수는 항상 정확하지만, 부동 소수점 연산은 미세한 오차가 발생할 수 있음
(3) 부동 소수점 오차 원인
부동 소수점은 일부 숫자를 정확히 표현할 수 없기 때문에 오차가 발생합니다.
0.1이 2진수에서 정확히 표현되지 않는 이유
10진수 0.1을 2진수로 변환하면:
즉, 0.1은 2진법으로 무한 반복되는 비트 패턴이 되므로, 컴퓨터는 근사값으로 저장합니다.
부동 소수점 오차 예제 (Python)
print(0.1 + 0.2) # 출력: 0.30000000000000004
Python에서는 부동 소수점의 근사값 때문에 정확한 0.3이 나오지 않고, 작은 오차가 발생합니다.
(⚠️ 이 값은 사용된 프로그래밍 언어나 환경에 따라 다를 수 있습니다.)
정리
- 컴퓨터는 2진법을 사용하며, 숫자는 0과 1로 저장된다.
- 정수는 정확한 값을 표현하지만, 표현 범위가 제한적이다.
- 부동 소수점은 더 넓은 범위를 표현할 수 있지만, 근사값으로 저장되기 때문에 정확도 문제(부동 소수점 오차)가 발생할 수 있다.
- 부동 소수점 오차는 2진법에서 일부 소수를 정확히 표현할 수 없기 때문에 발생한다.
'소프트웨어 > 기초' 카테고리의 다른 글
부동 소수점 - 4. 부동 소수점 연산의 한계 (0) | 2025.02.08 |
---|---|
부동 소수점 - 3. 부동 소수점 표기법 (IEEE 754 표준 개념) (0) | 2025.02.08 |
부동 소수점 - 1. 부동 소수점이란? (0) | 2025.02.08 |
부호 있는 정수(Signed Integer) vs 부호 없는 정수(Unsigned Integer) (0) | 2025.02.04 |
1의 보수 vs 2의 보수 (0) | 2025.02.04 |