콘텐츠로 이동

수치해석 기초

1. 진법 변환

진법 체계

진법 기수 사용 숫자 접두사
2진수 (Binary) 2 0, 1 0b
8진수 (Octal) 8 0~7 0o
10진수 (Decimal) 10 0~9 -
16진수 (Hexadecimal) 16 0~9, A~F 0x

10진수 → 2진수

나머지를 아래에서 위로 읽습니다.

13 ÷ 2 = 6 … 1
 6 ÷ 2 = 3 … 0
 3 ÷ 2 = 1 … 1
 1 ÷ 2 = 0 … 1

13(10) = 1101(2)

2진수 → 10진수

각 자리에 2의 거듭제곱을 곱해 합산합니다.

1101(2) = 1×2³ + 1×2² + 0×2¹ + 1×2⁰
        = 8 + 4 + 0 + 1 = 13(10)

2진수 ↔ 16진수 (4비트씩 묶음)

1010 1111(2)
= A    F   (16)
= AF(16)

2진수 4비트 → 16진수 1자리

16진수 변환표

10진수 2진수 16진수
0 0000 0
1 0001 1
8 1000 8
9 1001 9
10 1010 A
11 1011 B
12 1100 C
13 1101 D
14 1110 E
15 1111 F

2. 정수 표현

부호 없는 정수 (Unsigned)

n비트로 0 ~ 2ⁿ - 1 표현

8비트: 0 ~ 255
16비트: 0 ~ 65535

2의 보수 (Two's Complement)

부호 있는 정수 표현의 표준 방식입니다.

양수: 그대로 표현
음수: 비트 반전 후 1 더함

예) -5 (8비트)
1. 5 = 0000 0101
2. 반전: 1111 1010
3. +1:   1111 1011  → -5의 표현

범위

n비트 2의 보수: -2^(n-1) ~ 2^(n-1) - 1
8비트: -128 ~ 127
16비트: -32768 ~ 32767

3. 부동소수점 (Floating Point)

IEEE 754 표준으로 실수를 표현합니다.

구조 (32비트 단정도)

[부호(1)] [지수(8)] [가수(23)]
구성 비트 수 설명
부호(Sign) 1 0=양수, 1=음수
지수(Exponent) 8 (단정도) / 11 (배정도) 바이어스 127 더함
가수(Mantissa) 23 (단정도) / 52 (배정도) 1.xxx 형태의 소수 부분

부동소수점 표현 방법

13.625 를 IEEE 754로 표현

1. 2진수 변환: 13 = 1101, 0.625 = 0.101  → 1101.101
2. 정규화: 1.101101 × 2³
3. 부호: 0 (양수)
4. 지수: 3 + 127 = 130 = 10000010
5. 가수: 10110100000000000000000 (소수점 이후 23비트)

결과: 0 10000010 10110100000000000000000

부동소수점 오차

# 부동소수점 오차 예시
0.1 + 0.2 == 0.3  # False (실제: 0.30000000000000004)
  • 2진수로 정확히 표현 못하는 소수 존재
  • 엡실론(ε) 비교: 두 값의 차이가 매우 작은 값보다 작으면 같다고 판단

4. 비트 연산

연산 기호 설명
AND & 둘 다 1이면 1
OR | 하나라도 1이면 1
XOR ^ 다르면 1
NOT ~ 비트 반전
왼쪽 시프트 << 비트를 왼쪽으로 이동 (×2)
오른쪽 시프트 >> 비트를 오른쪽으로 이동 (÷2)
예) 5 & 3
  0101  (5)
& 0011  (3)
= 0001  → 1

예) 5 << 1 = 10  (5 × 2)
예) 8 >> 1 = 4   (8 ÷ 2)

시험 포인트

  • 10진수 → 2진수: 2로 나눈 나머지를 역순으로
  • 2진수 → 16진수: 4비트씩 묶어 변환
  • 2의 보수: 비트 반전 후 +1 → 음수 표현
  • 8비트 2의 보수 범위: -128 ~ 127
  • IEEE 754: 부호(1) + 지수(8) + 가수(23) = 32비트
  • 부동소수점 오차: 0.1+0.2 ≠ 0.3 (이진 표현의 한계)
  • 시프트 연산: << n은 ×2ⁿ, >> n은 ÷2ⁿ