2019.03.10 TIL

(TIL은 스스로 이해한 것을 바탕으로 정리한 것으로 오류가 있을 수 있습니다)

# 질문에 답하기

  1. 양의 정수 표현 방법
  2. 음의 정수 표현 방법

정수 표현

양의 정수 표현

  1. 부호비트는 0 (제일 앞에 숫자) 양수는 0 , 음수는 1
  2. 정수의 2진수로 표현 나머지는 0
  • 부호비트가 존재해서 양수와 음수를 구분해 준다고 하는데 음의 정수 표현이 왜 다시 나오며, 보수라는 개념이 왜 나올까? 아니 차라리 음의 정수 표현과 보수가 이해가 되는데, 양의 정수 표현 방법에 제일 앞에 부호비트를 표시한다는 내용이 왜 나오는지 이해가 안된다.
  • -> 보수를 하게 되면 자연스럽에 양수를 표현하였던 부분 0 이 1로 되면서 위의 조건에 적합하게 된다.

43을 1바이트로 표현하면

43 = 0010 1011(2) 이므로 0x2b (메모리 주소)(메모리에 저장되는 형태)
-43은 1010 1011(2) 이면 엄청 행복할텐데... 그렇지가 않다.
따라서 음의 정수에 대해서 더 공부해야 한다.

음의 정수 표현

음의 정수를 시작하기 전에는 보수의 개념이 필요하다.
보수란 쉽게 말해 보충해주는 수이다. 예를 들어 10진수에서 9의 보수를 구한다고 가정해보자. 3의 9의 보수는 3을 더해 9가 되는 6이다. 26의 9의 보수는 73이다. (보수는 각 자리수 별로 계산한다)
보수를 구하는 것은 각각의 자리수에 특정 수를 빼면 특정수에 대한 보수를 구할 수 있다.
123의 9의 보수는 876이다.
그럼 123의 10의 보수는 9의 보수에 +1 을 해주면 된다.(10진수이기 때문에) 877이다.

그럼 2진수의 보수에 대해서 알아보자.

0000 0100 은 10의 자리로 4를 나타낸다. 이러한 4의 1의 보수를 구해보면
1111 1011 이다. ( 2진수이기 때문에 각 자리수를 빼면 된다.)
여기에 1을 더하면 2의 보수가 표시된다.(2진수이기 때문에 / 1111 1100)
이러한 보수를 통해 - 뺴기가 따로 없는 컴퓨터에서 계산을 할 수 있다. 9 - 4 ===> 9 + (-4)로 계산하게 된다.

  • 10의 보수는 9의 보수를 구하여 +1을 해주면 되고
  • 2의 보수는 1의 보수를 구하여 +1을 해주면 된다.

이러한 보수로 음의 정수를 표현하는 이유는

  1. 1byte를 기준으로 볼 떄 제일 앞자리를 부호를 결정하는 것으로 보면 1비트를 손해보게 되고 또 2진수 계산에서 있어서 매우 귀찮게 된다.
  2. 컴퓨터가 인식할 수 있는 것은 on, off 밖에 없다. 따라서 컴퓨터에는 -라는 개념이 없고 컴퓨터는 모든 작업을 가산기로 처리한다. (가감기가 없음) 따라서 9-4를 9 마이너스 4로 계산하는 것이 아니라 9 플러서 -4로 가산 방법으로 처리한다.

컴퓨터의 덧셈, 뺼셈 계산 방법

이걸 바탕으로 9 -4 를 다시 해보면

  0000 1001 (9)        
+ 1111 1100 (-4)       
1 0000 0101 ---> 제일 앞 받아올림수는 버리고 최종적으로 0000 0101 로 5가 나오게 된다.

참고하면 좋을 자료

음의 정수

출처 : 2의 보수법으로 음수 표현하기

컴퓨터의 곱셈, 나눗셈 계산 방법

곱셈
그렇다면 과연 곱셈과 나눗셈은 어떻게 이루어질까?

4bit 연산에 맞추어 곱셈을 해보자.

10(10) 와 5(10)의 곱셈을 예로 들어서 진행해보자.

먼저 10을 2진법으로 바꾸면 8 + 2 ---> 1010(2)

5를 2진법으로 바꾸면 4 + 1 ----> 0101(2) 이 된다.

정수 곱셈
    0000 | 0101 ---> 처음에 주어진 수를 0000으로 리셋시키고 곱하는 수를 오른쪽에 적는다. 

  + 1010        ---> 위의 0101에서 제일 오른쪽의 수가 1이므로 왼쪽에 1010을 더해준다.

    1010 | 0101 ---> 여기까지의 과정을 거친뒤 shift 오른쪽으로 한번 진행  (shift 1)

    0101 | 0010 ---> 오른쪽으로 shift를 거친뒤에는 제일 앞에 0을 적어준다. 

                ---> 제일 오른쪽의 숫자가 0이므로 바로 shift 2진행

    0010 | 1001 ---> 제일 뒤의 숫자가 1이므로 + 1010을 진행해준다.

  + 1010        

    1100 | 1001  ----> 이후에 shift 1회 진행 shift 3

    0110 | 0100 -----> 제일 마지막 숫자가 0이므로 shift 4 진행

    0011 | 0010 -----> 제일 앞의 00을 빼고 110010(2)이 답이 된다.
  • 식에서 볼 수 있는 0101을 우리가 곱하기 하는 것처럼 제일 뒤에 1부터 한칸씩 옴겨가며(shift) 계산해 준다고 생각하면 된다.

왜 곱셈은 오른쪽으로 shift하고 나눗셈은 왼쪽으로 shift를 진행할까??

  • 우리가 곱셈을 할 때는 곱해주는 숫자를 1의 자리부터 시작하여 10의자리 100의 자리 옴겨가며 곱해주고 나눗셈을 할 때는 가장 높은 숫자부터 확인하며 나누어 주기 떄문에 연관하여 생각해 보면 된다.

나눗셈
나눗셈은 어떻게 진행될까? 정리해보자.

그럼 이번에는

11 / 3을 해보려고 한다.

먼저 11을 2진수로 바꾸면 1011(2)

3을 2진수로 바꾸면 0011(2) 이다.

정수 나눗셈

나눗셈은 정말 이해가 잘 되지 않는데

선생님 말로는 0011의 00을 빼고 11로 똑같이 나눗셈을 한다고 생각하면 된다고 했다.

?가 들어가는 곳은 위에 자리수가 0 , 0 으로 되는 것을 이야기 했다.

어떻게 이루어 지는 것을 확인하고 이후에 또 해볼 수 있을 것 같다.

나눗셈을 잘 설명한 영상이 있어서 첨부한다.

CPU의 나눗셈 - 개발자가 꼭 알아야 할 컴퓨터 하드웨어

+ Recent posts