티스토리 뷰

안녕하세요? 오늘 포스팅할 주제는 디지털 시스템과 2진수 체계에 대해서 포스팅하겠습니다.

사람들은 직관적으로 숫자를 보고 읽을 수 있는데 컴퓨터는 어떻게 숫자를 인식하고 계산을 하는지 의문이 드셨을거라 생각합니다.

컴퓨터는 2진수 즉 0과 1을 사용한 수체계를 사용합니다. 그 이유는 꺼진 상태(0), 켜진 상태(1)을 표현하는 방법에는 2진수가 적합하기 때문이죠. (물론 켜진상태를 0, 꺼진상태를 1로 두어도 관계없습니다.)

 

그렇다면 사람이 사용하는 10진수를 2진수로 바꾸는 방법과 이진수의 덧셈, 뺄셈연산에 대해서도 알아보도록 하겠습니다.

 

※ 10진수와 2진수의 변환

제가 중학교 다닐때는 1학년과정에서 10진수를 2진수로 변환하는 방법에대해서 공부했었는데요

지금에서야 이렇게 많이 활용하게 될줄은 몰랐네요 :)

그럼 35라는 숫자를 2진수로 변환하는 방법에 대해서 설명하도록 하겠습니다.

35를 2진수로 변환하는 방법

35를 2로나누어 몫이 0이될때까지 나눗셈을 진행합니다.

그리고 그 나머지들을 기록하여 모든 계산과정이 끝나면 나머지들을 역순으로 정렬합니다.

이 과정들이 모두 끝나면 십진수를 2진수로 변환하는 과정이 종료됩니다.

 

반대로, 2진수를 10진수로 바꾸는 과정에대해서도 알아볼까요?

2진수를 10진수로 변환하는 과정

위의 2진수는 6자리 2진수 이므로, 자리수는 0에서 5까지 6개의 자리수를 가집니다.

따라서 변환과정은 위의 식과 같습니다.

 

 

 

※ 소수의 2진수변환

소수점이하의 숫자들도 2진수로 변환할 수 있을까요?

대답은 '가능하다' 입니다. 같은 유한소수의 10진수라도 2진수로 변환했을 경우에 유한소수가 될 수 도있고, 무한소수가 될 수 도 있습니다. 예를 들어서 간단하게 설명드리겠습니다.

0.6875라는 소수를 2진수로 변환하는 과정을 보여드리겠습니다.

 

소수를 2진수로 변환하는 과정

변환 과정을 설명드리자면 다음과 같습니다.

1. 변환하고자 하는 소수에 2를 곱한다.

2. 일의 자리수를 기록한다.

3. 결과 값이 0이되면 종료한다.

 

마찬가지로 2진수 소수도 10진수 소수로 변환하는 과정을 수식을 통해 보여드리겠습니다.

2진수 소수의 10진수 소수로 변환

마찬가지로 2진수 소수에서 자리수값을 고려하여 계산하면 10진수 소수로 변환이 가능합니다.

 

 

자, 10진수를 2진수로 변환하는 과정에대해서 알게되었으니 이제 2진수를 이용해서 덧셈, 뺄셈 연산하는 방법에 대해서 알아보도록 하겠습니다. (곱셈과 나눗셈은 컴퓨터 구조 과목에서 진행하겠습니다.)

 

 

① 2진수의 덧셈

2진수의 덧셈은 간단합니다. 10진수들의 덧셈과 마찬가지로 carry(올림)가 발생하면 carry를 고려해서 함께 더해주고 연산을 진행하면 됩니다.

2진수의 덧셈

위의 결과는 00010011(2) , 11111100(2) 두 이진수를 덧셈한 결과입니다. carry가 발생하여 본래의 자리수 보다 크게 나타난 경우입니다. 이 경우에는 overflow라는 예외상황이 발생하게 되는데 시스템 내부에서 이를 처리할지는 설계자의 몫입니다. 저희는 덧셈에 대해서만 확인하는것이 목적이기 때문에 가볍게 덧셈에 대한 방법만 보고 넘어가겠습니다.

 

② 2진수의 뺄셈

2진수의 뺄셈은 보수(complement)의 개념을 도입해야합니다.

왜냐하면 사람의 경우 '-'기호를 직관적으로 보고 음수로 판단할 수 있지만, 컴퓨터의 경우는 -기호를 인식할 수 있는 직관이 없기때문에 보수라는 개념을 도입해서 뺄셈의 과정을 덧셈을 계산하는것처럼 수행해야 합니다.

여기서 최상위 비트 MSB ( Maximum Significant Bit)를 활용하여 양수와 음수를 판별할 수 있습니다.

MSB가 0이라면 양수, 1이라면 음수 입니다.

 

음수를 표현할 수 있는 방법은 부호화 크기(Signed Magnitude), 1의 보수(1's complement), 2의 보수(2's complement)가 있습니다.

1의 보수와 2의 보수에대해 자세히 살펴보겠습니다.

 

ㄱ. 부호화 크기 ( Signed Magnitude )

부호화 크기 방법은 최상위 비트 MSB를 부호비트로 사용합니다.

MSB가 0이라면 양수, 1이라면 음수로 정의합니다. 그리고 나머지 비트는 크기값을 나타냅니다.

따라서 부호화 크기 방법을 이용해서 -3을 세자리 이진수로 표현하면 111(2)로 표현할 수 있습니다.

하지만 부호화 크기 방식에서는 0의 값이 +0, -0으로 두 가지가 존재합니다.

그리고 음수끼리 크기 비교에서 모순이 발생합니다.

-1이 -2보다 커야하지만 2진수로 변환하면 101(2) < 110(2) 이므로 이는 모순입니다.

 

ㄴ. 1의 보수 ( 1's complement )

1의 보수를 이용해서 -3을 세자리의 이진수로 표현해보도록 하겠습니다.

3을 세자리의 이진수로 표현하면 011(2) 입니다. 여기에서 1의 보수를 구할 때 모든 bit를 반전시켜줍니다.

-3을 1의보수를 이용해서 2진수로 표현

1의 보수를 사용하여 001(2)+ 101(2) = 110(2) 으로 " 1 - 2 = -1 " 뺄셈을 구현할 수 있습니다.

또한 음수끼리의 크기비교 역시 모순이 발생하지 않습니다.

110(2) (-1) > 101(2) (-2)

하지만 1의보수 역시 +0과 -0의 두가지 0이 존재합니다.

그리고 연산시 overflow가 발생하면 이를 결과값에 다시 더해주어 결과를 수정해야만 합니다.

1의 보수 overflow 처리

 

ㄷ. 2의 보수 ( 2's complement )

2의 보수는 1의 보수의 값에 +1을 해주어 구현합니다.

2의 보수를 활용하여 -3을 세자리의 2진수로 변환하는 과정은 다음과 같습니다.

-3을 2의보수로 변환하는 과정
2의 보수의 덧셈

이전의 방법에서 문제가 되었던 두 가지의 0값 ( +0, -0 )이 나타난 문제가 해결되었고, 덧셈에서 overflow의 처리역시 다시 더해줄 필요없이 문제가 해결되었음을 알 수 있습니다.

부호화 크기 ( Signed Magnitude) 1의 보수 2의 보수
+3 011 011 011
+2 010 010 010
+1 001 001 001
+0 000 000 000
-0 100 111 -
-1 101 110 111
-2 110 101 110
-3 111 100 101
-4 -   100

 

마지막으로 8자리 2진수로 -33을 1의 보수표현법 2의 보수표현법으로 변환하는 방법을 예로 들고 마무리하겠습니다.

-33을 1의보수와 2의보수로 변환

이상 디지털 시스템과 2진수 체계 그리고 2진수를 음수로 표현하기위한 방법들에대해서 포스팅을 마치도록 하겠습니다.

 

 

 

 

 

 

 

 

 

 

댓글
공지사항