Language/C언어

이진 체계 정리

olivia-com 2020. 11. 19. 22:04

이진체계

 

<이진법>

- 0과 1을 사용하여 숫자를 표현하는 수단

- 각 숫자의 위치는 특정 양에 연계되어 있음

- 각 자리에 연계된 양은 그 오른쪽 자리에 연계된 양의 2배

- 이진법 표현이 나타내는 값을 계산하는 방법은 각 숫자값에 각 자리에 연계된 양을 곱한 결과들을 더하는 것이다.

 

 

 

 

 

 

<분수의 이진법 표현>

 

- 소수점(radix point) 사용. 즉, 소수점 왼쪽의 숫자들은 정수 부분을 나타냄

- 소수점 오른쪽의 첫 번째 자리에는 ½이 지정되며, 그 다음은 ¼, 또 그 다음은 ⅛으로 진행

- 각 자리에 지정된 양은 그 오른쪽 자리에 지정된 양의 두 배

 

정수의 저장

<2의 보수 표기법>

 

2의 보수 체계에서 비트 패턴의 가장 왼쪽 비트는 표현되는 값의 부호를 가리킨다

(가장 왼쪽 비트는 종종 부호 비트(sign bit)라고 불린다.)

- 이때 해석되어야 할 패턴의 부호 비트가 0이면, 단순한 이진법 표현으로 간주하여 값을 읽고, 해석되어야 할 패턴의 부호 비트가 1이면, 표현된 값이 음수라는 것을 알 수 있다.

⇒ 음의 값은 부호 비트가 1인 패턴으로 표현되며, 음이 아닌 값들은 부호 비트가 0인 패턴으로 표현된다.

ex) 패턴 0110은 6, 패턴 110은 –6을 의미

- 2의 보수 체계에서는 오른쪽에서 왼쪽으로 읽어나갈 때, 첫 번째 1이 나타날 때까지는 그 1을 포함하여 이들은 똑같다. 그 후의 부분에서는 두 패턴은 서로 보수 관계에 있다. 패턴의 보수(complement)는 모든 0은 1로 변경하고 모든 1은 0으로 변경하여 얻는다.

→ 오른쪽에서 왼쪽으로 진행하며 1이 복사될 때까지 원래 패턴을 복사한 다음, 나머지 비트들에 대해서는 보수를 취한다.

 

 

<2의 보수 표기법에서의 덧셈>

 

- 결과를 포함하여 모든 비트 패턴의 길이가 동일하다

→ 마지막 올림수에 의해 결과의 왼쪽에 생기는 추가 비트는 절삭되어야 함을 의미한다.

ex) 0111 + 1011 = 10010 이지만 0010로 절삭된다.

- 2의 보수 표기법의 주요 장점 중 하나는 더할 숫자들이 어떤 부호를 갖더라도 동일한 알고리즘 즉, 동일한 회로를 사용하여 계산할 수 있다는 것이다.

 

 

<오버플로우(overflow)>

 

- 계산결과 값이 표현될 수 있는 값의 범위를 벗어날 때 발생하는 문제

- 2의 보수 표기법을 사용할 경우, 두 개의 양수를 더하거나 두 개의 음수를 더할 때 이러한 현상이 발생할 수 있다. 두 개의 양수를 더한 결과가 음의 값에 해당하는 패턴이 되든지 두 개의 음수를 더한 결과가 양의 값에 해당하는 패턴이 되면 오버플로우가 발생한 것이다.

ex) 4비트 패턴을 갖는 2의 보수로 나타낼 수 있는 최댓값은 7이며, 최대 크기의 음수는 –8이다. 이때 9라는 값은 표현될 수 없어서 5+4라는 문제에 대한 정확한 결과를 얻을 수 없다.

 

 

<초과 표기법>

 

- 표현하고자 하는 수보다 초과해 표기하는 방법이다.

ex) 패턴 1100은 이진법에서는 12를 나타내지만 초과 체계에서는 4를 나타낸다

000은 이진법에서는 0을 나타내지만 초과 체계에서는 –8을 나타낸다.

- 길이 5인 패턴들에 기초한 초과 체계는 16 초과 표기법으로 불릴 텐데, 이는 패턴 10000이 보통 때의 16이라는 값 대신 0을 나타낼 것이기 때문이다. 마찬가지로, 3 비트 초과 체계는 4 초과 표기법으로 불릴 것이다.

 

 소수의 표현

<부동소수점(floating-point) 표기법>

 

- 소수 부분이 있는 값을 저장할 때 이용

- 먼저 바이트 상의 최상위 비트를 부호 비트로 지정한다. 이때에도 부호 비트가 0이면 음이 아닌 값을 나타내며, 1이면 음의 값을 나타낸다. 나머지 7비트는 두 개의 그룹으로 나누어 지수 부분(exponent field)과 유효숫자 부분(mantissa field)으로 사용한다. 부호 비트 다음의 3 비트는 지수 부분으로 지정하고, 나머지 4 비트는 유효숫자 부분으로 지정한다.

 

 

 

<바이트 해석 방법>

(1) 유효숫자 부분을 추출하여 그 왼쪽에 소수점을 위치시킨다.

(2) 지수 부분의 내용을 추출하고 3 비트 초과 방법으로 표현된 정수로 해석한다.

→ 지수가 양의 값일 경우에는 소수점을 오른쪽으로 옮기고, 지수가 음의 값일 경우에는 소수점을 왼쪽으로 옮긴다.

(3) 부호 비트를 확인해 0이면 양수, 1이면 음수임을 알 수 있다.

 

ex) 01101011 해석

(1) .1011추출

(2) 110은 3 비트 초과 방법에 의해 +2이므로 소수점 위치를 오른쪽으로 두 비트 옮기게 되어 10.11가 되고 이는 2¾임

(3) 부호 비트가 0이므로 2¾

 

 

<부동소수점 표기법을 사용하여 값 저장하기>

→ 바이트 해석 방법의 절차를 역으로 사용

(1) 이진법으로 표현

(2) 비트 패턴을 가장 왼쪽에 나타나는 1부터 시작하여 유효숫자 부분의 왼쪽 끝부터 오른쪽으로 복사

(3) 유효숫자 부분의 왼쪽에 소수점이 있다고 가정하고 원래의 이진수가 되기 위해 소수점을 몇 비트만큼 어느 방향으로 옮겨야 하는지 정하기

 

ex) 1⅛ 저장하기

(1) 1⅛에서 이진법으로 표현하면 1.001

(2) ___ _ 1001

(3) .1001에서 소수점을 오른쪽으로 한 비트 옮기면 1.001이 되므로 지수는 +1이 되어야 함

→ 4 초과 표기법에 따라 지수 부분에 101을 넣기

결과: 01011001

 

※ 유효숫자 부분을 채울 때 놓치기 쉬운 작은 문제:

-이때의 규칙은 이진법 표현에서 나타나는 비트 패턴에서 가장 왼쪽에 나타나는 1부터 시작하여 유효숫자 부분의 왼쪽 끝부터 오른쪽으로 복사한다는 것!!

이것은 이진법 표현에서 나타나는 가장 왼쪽의 1에서 시작해서 유효숫자 부분을 채워나가기 때문 ⇒ 정규형(normalized form)

ex) 00111100 와 01000110 둘다 ⅜으로 해석되겠지만 첫 번째 패턴만이 정규형이다

0 이외의 모든 값에 대한 표현은 유효숫자 부분이 1로 시작한다는 것을 의미

 

 

<절삭 오차>

 

- 유효숫자 부분의 자리수가 부족하여 저장될 값의 일부를 잃어버리게 됨을 의미

- 부동소수점 표기법으로 표현된 숫자들을 더할 때, 더하는 순서가 중요하다. 문제는 아주 큰 숫자와 아주 작은 숫자를 더할 때 작은 숫자가 절삭될 수 있다는 것이다. 따라서 여러 값들을 더하기 위한 일반 규칙은 작은 값들을 먼저 모아서 더하는 것이다.