진법 변환

IT 위키

진법(Numeral System)은 수를 표현하는 체계이다. 컴퓨터와 정보처리 분야에서는 특히 2진법, 8진법, 10진법, 16진법이 자주 사용되며, 수의 표현, 자료 표현, 컴퓨터 구조, 프로그래밍, 네트워크 주소 표현 등과 밀접하게 관련된다.

진법은 숫자를 어떤 기준으로 묶어 표현할 것인지를 정하는 방식이다. 일반적으로 사용하는 10진법은 0부터 9까지의 10개 숫자를 사용하고, 컴퓨터 내부에서 사용하는 2진법은 0과 1만 사용한다.

진법에서 기준이 되는 수를 기수 또는 밑(base, radix)이라고 한다. 예를 들어 2진법의 밑은 2이고, 10진법의 밑은 10이며, 16진법의 밑은 16이다.

위치적 기수법에서는 숫자의 위치에 따라 값이 달라진다. 같은 숫자 1이라도 10진수 10의 자리와 1의 자리에서 의미가 다르다.

기수(base)는 진법에서 사용하는 숫자의 개수를 의미한다.

진법 기수 사용하는 숫자
2진법 2 0, 1 1011
8진법 8 0 ~ 7 17
10진법 10 0 ~ 9 123
16진법 16 0 ~ 9, A ~ F 7B

위치적 기수법

[편집 | 원본 편집]

위치적 기수법은 숫자가 놓인 위치에 따라 자릿값이 결정되는 수 표현 방식이다.

10진수 123은 다음과 같이 해석된다.

123 = 1 × 10^2 + 2 × 10^1 + 3 × 10^0
    = 100 + 20 + 3

2진수 1011은 다음과 같이 해석된다.

1011(2) = 1 × 2^3 + 0 × 2^2 + 1 × 2^1 + 1 × 2^0
        = 8 + 0 + 2 + 1
        = 11(10)

즉, 각 자리의 값은 해당 진법의 기수를 거듭제곱한 값과 곱해져 전체 수를 이룬다.

주요 진법

[편집 | 원본 편집]

2진법은 0과 1만 사용하는 진법이다. 컴퓨터 내부의 데이터 표현에 사용된다.

컴퓨터는 전기적 신호의 상태를 이용하여 정보를 표현하므로, 켜짐과 꺼짐, 참과 거짓, 1과 0으로 표현하기 쉬운 2진법을 사용한다.

예:

1010(2) = 10(10)

8진법은 0부터 7까지의 숫자를 사용하는 진법이다.

2진수 3자리와 8진수 1자리가 정확히 대응되므로, 과거 컴퓨터 시스템에서 2진수를 간단히 표현하는 데 사용되었다.

예:

111(2) = 7(8)
1000(2) = 10(8)

10진법

[편집 | 원본 편집]

10진법은 사람이 일상적으로 가장 많이 사용하는 진법이다. 0부터 9까지의 10개 숫자를 사용한다.

예:

256(10)

16진법

[편집 | 원본 편집]

16진법은 0부터 9까지의 숫자와 A부터 F까지의 문자를 사용하는 진법이다.

16진법의 각 문자는 다음 값을 의미한다.

16진수 10진수
A 10
B 11
C 12
D 13
E 14
F 15

16진수 1자리는 2진수 4자리와 정확히 대응된다. 이 때문에 컴퓨터 분야에서 메모리 주소, 색상 코드, 기계어, 네트워크 주소 표현 등에 자주 사용된다.

예:

1111(2) = F(16)
11111111(2) = FF(16)

진법 표기

[편집 | 원본 편집]

서로 다른 진법의 수를 구분하기 위해 괄호와 밑을 사용한다.

예:

1010(2)
12(8)
10(10)
A(16)

프로그래밍 언어에서는 접두어를 사용하는 경우가 많다.

표기 의미
0b 2진수 0b1010
0o 8진수 0o12
0x 16진수 0x0A

언어에 따라 8진수 표기 방식이 다를 수 있으므로 주의해야 한다.

10진수로 변환

[편집 | 원본 편집]

다른 진법의 수를 10진수로 변환하려면 각 자리의 값을 기수의 거듭제곱과 곱하여 더한다.

2진수에서 10진수

[편집 | 원본 편집]
1011(2)
= 1 × 2^3 + 0 × 2^2 + 1 × 2^1 + 1 × 2^0
= 8 + 0 + 2 + 1
= 11(10)

8진수에서 10진수

[편집 | 원본 편집]
17(8)
= 1 × 8^1 + 7 × 8^0
= 8 + 7
= 15(10)

16진수에서 10진수

[편집 | 원본 편집]
2F(16)
= 2 × 16^1 + F × 16^0
= 2 × 16 + 15
= 47(10)

10진수에서 다른 진법으로 변환

[편집 | 원본 편집]

10진수를 다른 진법으로 변환할 때는 변환하려는 기수로 반복해서 나누고, 나머지를 역순으로 읽는다.

10진수에서 2진수

[편집 | 원본 편집]

10진수 13을 2진수로 변환하면 다음과 같다.

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

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

13(10) = 1101(2)

10진수에서 8진수

[편집 | 원본 편집]

10진수 29를 8진수로 변환하면 다음과 같다.

29 ÷ 8 = 3 ... 5
 3 ÷ 8 = 0 ... 3

따라서 다음과 같다.

29(10) = 35(8)

10진수에서 16진수

[편집 | 원본 편집]

10진수 47을 16진수로 변환하면 다음과 같다.

47 ÷ 16 = 2 ... 15

나머지 15는 16진수에서 F이므로 다음과 같다.

47(10) = 2F(16)

2진수와 8진수 변환

[편집 | 원본 편집]

2진수와 8진수는 서로 쉽게 변환할 수 있다. 8은 2의 3제곱이므로, 2진수 3자리와 8진수 1자리가 대응된다.

예:

110101(2)
= 110 101
= 6   5
= 65(8)

8진수를 2진수로 바꿀 때는 각 8진수 자리를 3비트 2진수로 바꾼다.

65(8)
= 6      5
= 110    101
= 110101(2)

2진수와 16진수 변환

[편집 | 원본 편집]

2진수와 16진수도 쉽게 변환할 수 있다. 16은 2의 4제곱이므로, 2진수 4자리와 16진수 1자리가 대응된다.

예:

11111111(2)
= 1111 1111
= F    F
= FF(16)

16진수를 2진수로 바꿀 때는 각 16진수 자리를 4비트 2진수로 바꾼다.

2F(16)
= 2      F
= 0010   1111
= 00101111(2)

앞쪽의 불필요한 0은 생략할 수 있다.

2F(16) = 101111(2)

진법 변환표

[편집 | 원본 편집]

자주 사용하는 10진수, 2진수, 8진수, 16진수의 대응 관계는 다음과 같다.

10진수 2진수 8진수 16진수
0 0000 0 0
1 0001 1 1
2 0010 2 2
3 0011 3 3
4 0100 4 4
5 0101 5 5
6 0110 6 6
7 0111 7 7
8 1000 10 8
9 1001 11 9
10 1010 12 A
11 1011 13 B
12 1100 14 C
13 1101 15 D
14 1110 16 E
15 1111 17 F

컴퓨터에서의 활용

[편집 | 원본 편집]

진법은 컴퓨터 시스템에서 매우 중요하다.

대표적인 활용은 다음과 같다.

  • 비트바이트 표현
  • 메모리 주소 표현
  • 기계어와 어셈블리어 표현
  • 색상 코드 표현
  • 네트워크 주소 표현
  • 파일 권한 표현
  • 문자 인코딩 표현
  • 디버깅과 덤프 분석

2진법과 컴퓨터

[편집 | 원본 편집]

컴퓨터는 내부적으로 데이터를 0과 1의 조합으로 표현한다. 이는 전기적 신호의 유무, 트랜지스터의 상태, 논리 회로의 참과 거짓을 표현하기에 적합하기 때문이다.

예를 들어 8비트는 2진수 8자리로 표현할 수 있으며, 총 256개의 값을 표현할 수 있다.

2^8 = 256

따라서 1바이트는 일반적으로 0부터 255까지의 값을 표현할 수 있다.

16진법과 컴퓨터

[편집 | 원본 편집]

16진법은 2진수를 사람이 읽기 쉽게 표현하는 데 사용된다.

2진수 8자리는 16진수 2자리로 표현할 수 있다.

11111111(2) = FF(16)

이 때문에 16진법은 다음과 같은 곳에서 자주 사용된다.

  • 메모리 주소
  • 색상 코드
  • MAC 주소
  • IPv6 주소
  • 기계어 표현
  • 바이너리 덤프
  • 디버깅 로그

색상 코드

[편집 | 원본 편집]

웹 색상은 16진수로 표현되는 경우가 많다.

예:

#FF0000

이는 빨강, 초록, 파랑 값을 각각 16진수로 표현한 것이다.

FF = 255
00 = 0
00 = 0

따라서 `#FF0000`은 빨간색을 의미한다.

파일 권한과 8진법

[편집 | 원본 편집]

UNIX와 Linux의 파일 권한은 8진법으로 표현되는 경우가 많다.

예:

chmod 755 file.sh

여기서 755는 사용자, 그룹, 기타 사용자에 대한 권한을 8진수로 나타낸 것이다.

권한
4 읽기
2 쓰기
1 실행

따라서 7은 읽기, 쓰기, 실행 권한을 모두 가진다.

7 = 4 + 2 + 1

소수 부분의 진법 변환

[편집 | 원본 편집]

정수뿐 아니라 소수 부분도 진법 변환이 가능하다.

10진수 소수를 2진수로 변환할 때는 소수 부분에 변환하려는 기수를 반복해서 곱하고, 정수 부분을 순서대로 읽는다.

예를 들어 0.625를 2진수로 변환하면 다음과 같다.

0.625 × 2 = 1.25  → 1
0.25  × 2 = 0.5   → 0
0.5   × 2 = 1.0   → 1

따라서 다음과 같다.

0.625(10) = 0.101(2)

보수와 진법

[편집 | 원본 편집]

컴퓨터에서 음수를 표현할 때 보수 개념이 사용된다. 특히 2진수에서는 1의 보수2의 보수가 중요하다.

2의 보수는 현대 컴퓨터에서 정수를 표현할 때 널리 사용되는 방식이다.

예를 들어 4비트에서 5는 다음과 같다.

0101

-5를 2의 보수로 표현하면 다음과 같다.

0101 → 비트 반전 1010 → 1을 더함 1011

따라서 4비트 2의 보수 표현에서 -5는 1011이다.

진법과 비트 수

[편집 | 원본 편집]

n비트로 표현할 수 있는 값의 개수는 다음과 같다.

2^n개

예:

비트 수 표현 가능한 값의 개수 부호 없는 정수 범위
4비트 16개 0 ~ 15
8비트 256개 0 ~ 255
16비트 65,536개 0 ~ 65,535
32비트 4,294,967,296개 0 ~ 4,294,967,295

부호 있는 정수는 표현 방식에 따라 범위가 달라진다.

관련 개념 비교

[편집 | 원본 편집]

2진법과 10진법

[편집 | 원본 편집]
구분 2진법 10진법
기수 2 10
사용 숫자 0, 1 0 ~ 9
주요 사용처 컴퓨터 내부 표현 일상적인 수 표현

8진법과 16진법

[편집 | 원본 편집]
구분 8진법 16진법
기수 8 16
2진수 대응 3비트 4비트
사용 숫자 0 ~ 7 0 ~ 9, A ~ F
주요 사용처 파일 권한, 과거 시스템 표현 메모리 주소, 색상 코드, 덤프 분석

숫자와 수

[편집 | 원본 편집]

진법을 공부할 때 숫자와 수를 구분하면 이해가 쉽다.

구분 설명
숫자 수를 나타내기 위해 사용하는 기호
양이나 크기를 나타내는 추상적 값

예를 들어 10이라는 표기는 10진법에서는 열을 뜻하지만, 2진법에서는 둘을 뜻한다. 즉, 표기는 같아도 진법에 따라 값이 달라질 수 있다.

학습 포인트

[편집 | 원본 편집]

진법은 컴퓨터 구조와 프로그래밍의 기초 개념이다. 학습할 때는 다음 내용을 중심으로 정리하는 것이 좋다.

  • 기수의 의미
  • 위치적 기수법
  • 2진수, 8진수, 10진수, 16진수의 차이
  • 2진수와 8진수의 3비트 대응
  • 2진수와 16진수의 4비트 대응
  • 10진수와 다른 진법 간 변환
  • 16진수 A~F의 의미
  • 비트 수와 표현 가능한 값의 개수
  • 2의 보수와 음수 표현
  • 컴퓨터에서 16진수를 사용하는 이유

시험 포인트

[편집 | 원본 편집]
  • 진법은 수를 표현하는 체계이다.
  • 진법의 기수는 사용하는 숫자의 개수이다.
  • 2진법은 0과 1을 사용한다.
  • 8진법은 0부터 7까지 사용한다.
  • 10진법은 0부터 9까지 사용한다.
  • 16진법은 0부터 9와 A부터 F까지 사용한다.
  • 16진법에서 A는 10, F는 15를 의미한다.
  • 2진수 3자리는 8진수 1자리와 대응된다.
  • 2진수 4자리는 16진수 1자리와 대응된다.
  • 다른 진법을 10진수로 바꿀 때는 각 자리 값에 기수의 거듭제곱을 곱해 더한다.
  • 10진수를 다른 진법으로 바꿀 때는 해당 기수로 반복해서 나누고 나머지를 역순으로 읽는다.
  • n비트로 표현할 수 있는 값의 개수는 2^n개이다.
  • 8비트로 표현할 수 있는 부호 없는 정수 범위는 0부터 255까지이다.
  • 컴퓨터 내부에서는 2진법을 사용하지만, 사람이 읽기 쉽게 16진법을 함께 사용한다.

같이 보기

[편집 | 원본 편집]