2 분 소요

Chapter 02 변수(Variable)

3. 진법

대부분의 사람들도 알고 있겠지만 우리가 평상시에 사용하는 것은 10진법이고 컴퓨터는 2진법을 사용한다. 해당 내용은 비트와 바이트를 설명하기 위한 것임으로 2진법/8진법/10진법/16진법 간의 변경은 상세하게 몰라도 된다.

3.1 10진법과 2진법

우리가 평상시에 배우는 것은 10진법이다. 말그래도 10이라는 숫자가 다음 단계의 숫자를 뜻하는 것이다. 하지만 컴퓨터가 사용하는 2진법은 2라는 숫자가 다음 단계의 숫자를 뜻한다.
2진법과 10진법을 표현하면 아래와 같다. 외울 것까지는 아니니 가볍게 보자

2진수 10진수
0 0
1 1
10 2
11 3
100 4
101 5
110 6
111 7
1000 8
1001 9
1010 10

말그대로 우리는 9라는 숫자 이후에 새로운 숫자가 없듯이 2진법에서는 1다음에 2라는 숫자가 없고 0, 1로만 이루어진 것이다.
추후 진법 변환에 대한 방법도 적겠지만 그렇게 중요하다고는 생각이 안된다. 기초라고만 생각하고 이런 개념으로 이루어진 것이라고까지만 인지하고 빠르게 넘어가자

3.2 비트(bit)와 바이트(byte)

한 자리의 2진수를 ‘비트(bit)’라고 하며, 1비트는 컴퓨터가 값을 저장할 수 있는 최소단위이다. 그러나 너무 작은 단위여서 비트 8개를 묶어서 ‘바이트(byte)’라는 단위로 정의한다.

이외로도 ‘워드(word)’라는 단위는 ‘CPU가 한 번에 처리할 수 있는 데이터의 크기‘를 의미한다. 워드의 크기는 CPU의 성능에 따라서 달라지며 예전에는 32비트(4바이트)였지만 최근에는 대부분이 64비트(8바이트)로 알고 있다.

가장 중요한 것은 이것임으로 이것은 꼭 알아두자

n비트로 표현할 수 있는 10진수
값의 개수 : 2ⁿ
값의 범위 : 0 ~ 2ⁿ-1

3.3 8진법과 16진법

2진법으로만 사용하기에는 자리수가 너무 길어진다. 이러한 단점을 보완하기 위해 8진법이나 16진법 또한 사용한다.
아래는 2진법, 8진법, 10진법 그리고 16진법대로 나열한 테이블이다.

2진법 8진법 10진법 16진법
0 0 0 0
1 1 1 1
10 2 2 2
11 3 3 3
100 4 4 4
101 5 5 5
110 6 6 6
111 7 7 7
1000 10 8 8
1001 11 9 9
1010 12 10 A
1011 13 11 B
1100 14 12 C
1101 15 13 D
1110 16 14 E
1111 17 15 F
10000 20 16 10

위와 같이 16을 표현하는데 2진법은 5 자릿수를 사용하고 나머지는 2개를 사용한다. 16진법의 알파벳은 카드게임의 J, Q, K, A와 비슷한 것이라고 생각하면 좋다. A는 10, B는 11 순으로다.

2진수를 8진수, 16진수로 변환

해당 부분은 어려운 부분이 아니니 수학책이나 인터넷을 통해 찾아보길 바란다. 개인적으로 반도체 설계나 C언어를 하는 사람은 필수겠지만 자바는 굳이 변환까지 자세히 알 필요까지는 없다고 생각한다. 아예 모르는건 기초도 모르는거니까 각 진법에 대해서만 알아도 된다고 생각된다.

3.4 정수의 진법 변환

10진수를 n진수로 변환
n진수를 10진수로 변환

이 부분도 어려운 부분도 아닐 뿐더러 중학교 때 배우는걸로 기억하니 인터넷을 통해 빠르게 흝어보는 것을 추천한다. 웹프로그래밍하면서 써본적은 없다. 고급 개발자가 된다면 사용할지도 모르겠다. 그건 그떄가서 해도 된다고 생각한다.

3.5 실수의 진법변환

이 부분은 좀 흥미롭다. 중학교 때 이런걸 해본 기억이 없는 것 같아 책에서 읽은 것을 토대로 간략하게 적어본다.

10진 소수점수를 2진 소수점수로 변환하는 방법

아까는 0이 될때까지 나누었다면 이번에는 소숫점이 0이 될때까지 곱한다.
예를 들어 10진수 0.625를 2진수로 변환하는 단계는 아래와 같다.

  1. 10진 소수에 2를 곱한다.
    0.625 * 2 = 1.25
  2. 위의 결과에서 소수부만 가져다가 다시 2를 곱한다.
    0.25 * 2 = 0.5
  3. 위 과정들을 반복하여 소수부가 0이 될때까지 반복한다.
    0.625 * 2 = 1.25
    0.25 * 2 = 0.5
    0.5 * 2 = 1.0
  4. 위 결과에서 정수부만 위에서 아래 순서대로 적고 앞에 ‘0.’만 붙이면 된다.
    0.625 * 2 = 1.25
    0.25 * 2 = 0.5
    0.5 * 2 = 1.0
    -> 0.101₂
2진 소수점수를 10진 소수점수로 변환하는 방법

이건 살짝 정수 2진수를 10진수로 변환하는 방법과 같다. 궁금하면 알아서 찾아보자. 난 빠르게 넘어가고 싶다… 수학 그만 충분히했어

3.6 음수의 2진 표현 - 2의 보수법

이 부분도 상당히 흥미로운 점도 있으며 수학적이며 컴퓨팅적인 사고를 한번은 해볼 수 있으니 찾아보길 바란다.

앞으로는 이처럼 상세히보다는 조금 더 간략하게 적을 예정이니 부족한 점이 많을 수 있다. 그러한 점들은 문서나 책 또는 인터넷이라는 좋은 매개체를 통해서 학습하길 바란다.