[2] 0과 1로 숫자를 표현하는 방법

hyunsooo·2023년 3월 14일
0

컴퓨터는 기본적으로 bit라는 정보 단위를 사용합니다.
bit는 0과 1을 표현하는 가장 작은 단위로 1 bit는 2가지, 2 bit는 4가지, n bit는 2n2^{n}가지를 표현할 수 있습니다.
우리가 사용하는 게임이나 여러가지 프로그램들은 전부 0과 1로 이루어진 수많은 비트로 표현됩니다.

그렇다면 정보의 단위는 어떻게 확장되는지 알아보겠습니다.

1바이트(1byte)8비트(8bit)
1킬로바이트(1kB)1000바이트(1000byte)
1메가바이트(1MB)1000킬로바이트(1000kB)
1기가바이트(1GB)1000메가바이트(1000MB)
1테라바이트(1TB)1000메가바이트(1000GB)

과거에는 정보의 크기가 크지 않아 1024와 1000의 차이가 크지 않아 같이 사용하곤 했는데 최근에는 이 작은 오차가 결과에 크게 작용할 수 있어 단위를 분류하기 시작했습니다.

1바이트(1byte)8비트(8bit)
1키비바이트(1kiB)1024바이트(1024byte)
1미비바이트(1MiB)1024키비바이트(1000kiB)
1기비바이트(1GiB)1024미비바이트(1000MiB)
1테비바이트(1TiB)1024미비바이트(1000GiB)

본론으로 돌아와 컴퓨터는 0과 1로 어떻게 숫자를 표현하는지 알아보겠습니다.
우리가 일상적으로 사용하는 10진법을 2진법으로 변환하면 0과 1로 표현할 수 있습니다.
십진법은 숫자가 9를 넘어갈 때 자리 올림을 하는 반면에 이진법을 1을 넘어가는 시점에 자리 옮림을 하여 0과 1로만 숫자를 표현하는 방법입니다.

십진법이진법
11
210
311
4100
91001
101010

이진법은 십진법과 구분하기 위해 1001(2)1001_{(2)}, 0b1001로 표현할 수 있습니다.
그렇다면 음수는 어떻게 표현할까요?
대표적으로 2의 보수법을 사용합니다. 비트들의 맨 앞을 부호비트로 정하여 구분할수도 있지만 이 방법은 계산 시 추가적인 연산이 필요한 반면 2의 보수법은 이런 추가연산이 필요 없어 2의 보수법을 주로 채택하고 있습니다.

2의 보수법은 1의 보수법에 1을 더하는 방법으로 구할 수 있습니다.
1의 보수법은 비트들을 반전시켜서 음수를 표현하는 방법이며 여기에 1을 더하면 되는 방법입니다.

십진법이진법1의 보수법2의 보수법
-11을 이진법으로 표현 000111101111
-22를 이진법으로 표현 001011011110
-66을 이진법으로 표현 011010011010
-77을 이진법으로 표현 011110001001

여기서 -6을 나타내는 1010과 10을 나타내는 1010과는 어떻게 구분하는지 의문점이 들 수 있습니다. 이것을 구분하기 위해 CPU내부에 flag 레지스터라는 존재가 있기 때문에 양수인지 음수인지 구분할 수 있습니다.

그렇다면 2의 보수법으로 뺄셈 계산의 예를 하나 들어보겠습니다.
100(2)11(2)=01(2)100_{(2)} -11_{(2)} = 01_{(2)}이 됩니다. 이것을 2의 보수법으로 바꿔서 풀어보면 아래와 같습니다.

11(2)100(2)101(2)-11_{(2)} \rightarrow 100_{(2)} \rightarrow 101_{(2)}

100(2)+101(2)=01(2)100_{(2)} + 101_{(2)} =01_{(2)}으로 표현할 수 있습니다.


이진법과 같이 컴퓨터는 십육진법을 사용하는 경우가 많습니다.
이진법은 숫자를 표현하기 위한 길이가 너무 길어지는 단점이 있고 십육진법은 이진법으로, 이진법은 십육진법으로 간편하게 변환할 수 있기 때문에 많이 사용합니다.

십육진법도 이진법과 십진법처럼 15를 넘어갈 때 자리올림을 하며 아래와 같이 표현할 수 있습니다.

십진법십육진법
00
11
22
99
10A
11B
12C
13D
14E
15F
1610

십육진법도 표기에 구분을 하기 위해 15(16)15_{(16)} 또는 0x15와 같은 방식으로 표현할 수 있습니다.

십육진법을 사용하는 이유 중 이진법과의 변환이 간단하다고 설명했습니다.
십육진법 한자리의 수를 이진법으로 표현하기 위해서는 총 4개의 자리가 필요합니다.
15(15)15_{(15)}을 이진법으로 표현하기 위해서는 1111(2)1111_{(2)}로 표현할 수 있게 됩니다.
위와 같은 특징으로 십육진법의 하나의 자리를 나타내는 수를 4개의 이진법으로 표현하고 이를 이어 붙이기만 하면 이진법으로 표현할 수 있습니다.

1A2B(16)0001(2)1010(2)0010(2)1011(2)0001101000101011(2)1A2B_{(16)} \rightarrow 0001_{(2)} 1010_{(2)} 0010_{(2)} 1011_{(2)} \rightarrow 0001101000101011_{(2)}

반대로 이진법을 십육진법으로 변환하는 것도 간단합니다.

11010101(2)1101(2),0101(2)11010101_{(2)} \rightarrow 1101_{(2)}, 0101_{(2)}으로 나눌 수 있고
1101(2)=D(16)1101_{(2)} = D_{(16)}, 0101(2)=5(16)0101_{(2)} = 5_{(16)}
11010101(2)=D5(16)11010101_{(2)} = D5_{(16)}으로 표현할 수 있습니다.


오늘은 컴퓨터가 0과 1로 숫자를 표현하는 방법에 대해서 알아보았습니다.
다음 시간에는 0과 1로 문자를 표현하는 방법에 대해서 알아보겠습니다.

profile
지식 공유

0개의 댓글