본문 바로가기
CSE/디지털 논리

[컴퓨터 구조] 2진수 체계의 정수 표현

by 뜨거운 개발자 2023. 2. 10.

10진수와 2진수

2진수 체계에서는 어떤 수를 0과 1, 부호 및 소수점으로 표현한다.

예를들어서 10진수 -13.625라는 숫자가 있다면 이는 2진수로 -1101.101로 표현이 된다.

숫자의 이진수 소수점 표현법을 간략히 설명하자면 소수점 아래 첫째자리는 2 ^-1(=1/2)(=0.5) 둘째자리는 2^-2(=1/4)(=0.25) 셋째자리는 2^-3(=1/8) (=0.125) 이다.

즉 0.5 + 0.125를 해서 0.625를 표현한 것이다.

컴퓨터의 이진수 표현법

그러나 컴퓨터에서 사용되는 이진수 체계에서는 부호와 소수점을 사용할 수가 없어서 오직 0과 1만으로 수를 표현 해야 한다. 따라서 양수또는 음수를 나타내는 부호역시 0또는 1을 사용해서 표시해야하고 소수점도 필요에 따라서 특정위치에 있다고 가정하여 수를 표현해야한다.

일반적으로 우리가 부호없는 정수를 표현하는 이진수 표현법에서 숫자 5의 경우 8bit에서 [0000/0101] 이렇게 표현이 되고 이는 우리는 이진 소수점이 최하위 비트 아래있다고 생각한 표현법이다.

이진소수점

  • 이진 소수점이란 2진수 표현에서 소수점으로, 자릿수가 1보다 큰수와 자릿수가 0보다 작은 수의 경계점이다.

즉 우리가 위에서 표현한 숫자는 이진표현법으로 [0000|0101].(소수점이 가장 뒤에있음)으로 생각하면된다.

만약 이진 소수점이 4자리에 있다면 5는 [0100.0000] 이렇게 표현이 됐을 것이다.(실제로 .은 생략되고 저 위치에 있다고 알고 나중에 해석을 그렇게 하는 것)

이렇게 이진 소수점을 어디에 놓는지에 따라서 비트값을 달라지게 되는 것이다.

즉 정리하자면 이진소수점이 오른쪽으로부터 4자리의 경우 8비트 체계에서 숫자 5는 [0101/0000]으로 표현되고 최하위 비트 아래에 이진소수점이 있다고 해석한다면 [0000/0101] 이렇게 됩니다.

같은 숫자여도 이진소수점에 위치에 따라서 다르게 표현이 된다는 것이죠.

부호비트

컴퓨터는 양수뿐 아니라 음수도 처리하기 떄문에 음수를 표현하는 방법이 필요하다.

그 방법은 여러가지가 있는데 공통적으로 특징가장 좌측 비트를 부호비트로 사용한다는 점이다.

부호비트가 0이면 양수이고 부호비트가 1이면 음수이다.

부호비트를 사용하는 2진수 표현으로는 다음과 같은 세가지 방법이 있다.

  • 부호화-크기 표현
  • 1의 보수표현법
  • 2의 보수표현법

1. 부호화-크기표현

세가지 음수 표현방법중 가장 간단한 방법이 부호화 -크기 표현이다. 이 표현방식은 수를 표현하는 단어의 비트수가 n이라면 맨 좌측 비트가 부호비트이고, 나머지 (n-1)개의 비트들은 수의 크기를 나타낸다.

예시

8비트 타입에서 예시를 들자면, +9 같은 경우 [0 000/1001] 이렇게 표현이 되고, -9같은 경우[1 000/1001]로 표현이 된다.

또 다른 예시로 +35의 경우 [0 010/0011] -35 경우 [1 010/0011]로 표현이 된다.

단점

첫째, 덧셈과 뺄셈을 처리하기 위해서 부호비트와 크기 부분을 별도로 처리해야한다는 점이다.

두수의 덧셈 과정 : 두수의 부호를 비교→부호가 같은 경우에는 크기부분을 더하고 다른경우 차이를 구한다→ 크기 부분의 절댓값이 더 큰 수의 부호를 결과값의 부호로 부호비트를 결정한다.

둘째 , 0에 대한 표현이 두가지라는 점이다.

[0 000/0000]과 [1 000/0000] 이 +0 -0을 표현하기 때문이다.

이렇게 되면 데이터가 0인지 검사하는 과정이 더 복잡해지고 n비트 2진수로 표현할 수 있는 2^n개가 아니라 2^n -1 개로 줄어든다.

 

2. 보수 표현

부호화 -크기 표현의 결점들을 해결하기 위해서 보수 표현이 개발되었다.

어떤 양수에 대하여, 1의 보수와 2의 보수로 표현한 결과는 동일하다.

그러나 양수를 음수로 바꾸는 음수화 방법에 있어서는 차이점이 존재한다.

  • 1의 보수표현 : 모든 비트들을 반전한다.(0→1, 1→0)
  • 2의 보수표현 : 모든 비트들을 반전하고, 결과값에 1을 더한다.

예시

<9>[0 000/1001]

  • 1의 보수표현법 : [1 111/0110]
  • 2의 보수표현법 : [1 111/0111]

<+35>[0 010/0011]

  • 1의 보수표현법 : [1 101/1100]
  • 2의 보수표현법 : [1 101/1101]

특징

변환 하는 과정은 1의 보수가 더 간단하지만 일반적인 컴퓨터들에서 2의 보수가 더 많이 사용되고 있다.

그 이유는 2의 보수경우 같은 경우 같은 길이의 비트로 표현할 수 있는 숫자가 하나 더 많기 때문이다.

1의 보수로 표현할 수 있는 숫자가 하나 더 적은 이유는 0이 +0과 -0이 존재해서 이다.

간단하게 8비트로 표현했다면 위와 같다.

2의 보수를 십진수로 바꾸기 예시

예를 들어 2의 보수로 표현된 숫자가 [1 010/1110] 이 있다고 해보자.

조립은 분해의 역순이라고 [1 010/1101]의 비트를 반전시키면 [0 101/0010]이 되는데 64 +16 +2 를 하게 되면 82입니다. 이거에 보수를 표현한거니까 -82입니다.

라고 말하면 계산이 너무 복잡하겠죠? 더 간단히 생각을 해보겠습니다.

[1 010/1110] 을 그냥 -128 + (32 + 8 +4 + 2)를 하면 -82가 됩니다.

어떻게 이렇게 나왔냐면…! 2의 보수표현에 해당하는 가장 큰 비트의 숫자를 음수로 보고 그 밑의 숫자는 양수로 생각해서 계산을 하면 2의 보수를 쉽게 계산할 수 있습니다.

두가지 다 옳바른 방법이니 상황에 맞게 더 계산하기 쉬운걸로 계산하면 될 것 같습니다.

2의 보수 표현이 사람들에게 익숙하지는 않지만 컴퓨터에게 중요한 산술연산인 덧셈과 뺄셈을 더 편리하게 처리 할 수 있게 해준다. 따라서 대부분의 컴퓨터는 2의 보수표현법을 사용합니다.

2의 보수 표현의 덧셈과 뺄셈

예를 들어서 -2 와 + 2 가 있다고 해보자.

이 두개를 2의 보수표현으로 표현하면 +2[0 000/0010] -2[1 111/1110] 이렇게 됩니다. 둘을 연산하려면 그냥 더하면 [0 000/0000] 이렇게 됩니다.

못 믿겠다고요? 다른 예시도 들어봅시다.

-5 와 +3 을 더해보겠습니다. +5 [0 000/0101]→-5 [1 111/1011], +3 [0 000/0011]입니다.

이제 둘을 합쳐보면

[1 111/1011]

[0 000/0011]

= [1 111/1110] 이렇게 됩니다.

다시 해석을 해보자면 (-128 + 126으로)10진수로 표현하면 -2가 돼서 덧셈이 올바르게 됐다는 것을 볼 수가 있습니다.

 

부호비트 확장

다른 부호화 -크기 표현 방법이나 1의 보수표현법 역시 비트확장을 할 수가 있지만 가장 많이 사용되는 2의 보수표현법으로만 예시를 들어보겠다.

우리는 지금까지 8비트로 숫자를 표현했다. 하지만 형변환이나 더 큰 자료형에 현재 자료형을 담아야 할 일이 생길때 어떻게 처리를 해야할까?

그것을 처리하기 위해서 필요한 녀석이 부호비트확장법이다.

2의 보수표현 8비트를 16비트로 확장 예시

  • +21 = [0 001/0101] (8 비트 2의 보수 표현법)
  • +21 = [0 000/0000/0001/0101](16비트 2의 보수표현법)
  • -21 = [1 110 1011] (8비트 2의 보수 표현법)
  • -21 = [1 1111/1111/1110/1011] (16비트 2의 보수표현법)

이렇게 보면 감이 오지 않는가? 안 오는 사람들을 위해 설명을 추가해보겠다.

부호비트는 확장된 비트의 가장 왼쪽 끝으로 보내주고, 그외의 양수의 경우 빈 공간은 0으로 채워주고 음수의 경우는 빈공간을 1로 채워주면 된다.

정리

지금까지 정리한 정수표현들이 고정소수점 수라고 불리기도 한다. 왜냐면 소수점을 생각하지 않고 정수만 있다고 생각한 즉 소수점은 오른쪽 마지막 비트 뒤에 있다고 생각하고 만든 것이다. 만약 이진 소수점의 위치를 조정한다면 각 비트에 따른 숫자 표현이 2^-1 , 2^-2 이런식으로도 등장하기 때문에 이진소수점의 위치를 정하고 알고있는 것은 비트를 사용해서 숫자를 저장할 떄 아주 중요한 역활을 한다. 다음에는 부동소수점과 고정소수점에 대해서 논의 해보도록 하겠다.


Uploaded by

N2T
728x90