반응형
Recent Posts
Recent Comments
Link
관리 메뉴

공머씨의 블로그

내가 공부한 논리회로설계8. Complement Number2. 본문

내가 공부한 3학기 전공/내가 공부한 논리회로 설계

내가 공부한 논리회로설계8. Complement Number2.

공머씨 2020. 4. 12. 23:35
반응형

지난 시간에 이어 2진수의 보수(1의 보수, 2의 보수)에 대해 조금 더 공부해보겠습니다.

 

16. 1의 보수 쉽게 구하기 

EX. 이진수 0110이 있습니다. 1의 보수는? 

1111에서 0110을 빼는 방식으로 1의 보수를 구했었습니다.

훨씬 더 쉬운 방법이 있습니다.

결과 값으로 나온 2진수를 살펴보면 반대의 결과가 나온 것을 볼 수 있습니다.

 

1의 보수 쉽게 구하기 결론 Bit wise inverse 비트를 반전시키면 됩니다.

왜??? 

0110에 1의 보수를 구하기 위해서 1111에서 빼는 것이므로

1에서 0을 빼면 1이 되고 1에서 1을 빼면 0이 되므로,, 비트 반전이 일어납니다.

정리하면 다음과 같습니다. 

 

17. 2의 보수 쉽게 구하기 

 

 

Ex. 0110의 2의 보수는 ???

원래 우리가 전에 배웠던 것은 정의대로 푸는 것이었습니다.

(10000에서 0110을 빼는 방식을 사용했었습니다.)

 

17-1. 2의 보수 쉽게 구하기  결론: 1의 보수를 구한 뒤 1을 더해주면 됩니다. ===>2의 보수

 

왜???

10000은 1111보다 1만큼 큰 수입니다.

2의 보수의 결과가 1의 보수보다 1만큼 큰 결괏값을 갖게  되는 것입니다.

 

EX. 0111의 2의 보수는????

0111에서 비트를 반전시키면 1의 보수가 나오므로 여기에다가 1을 더하면 되겠군.

 

답은 

1000+1=1001

위와 같이 나옵니다. 

 

17-2. 다른 방법으로도 구할 수 있습니다. 

EX. 0110의 2의 보수는?

1) LSB에서 시작해서 최초의 1까지는 그대로 둔다.

0110

 

2) 나머지 부분은 상호 교환한다.

1010

지금까지 1의 보수, 2의 보수 쉽게 구하는 방법을 공부해보았습니다.

 

정리하면 다음과 같습니다.

 

 

 

 

18. 이제 이 TABLE를  차근차근 채워보겠습니다.

 

18-1 Unsigned 왼쪽은 이진수, 오른쪽은 십진수를 대응시킨 표입니다. 

 

18-2. 1의 보수 사용하는 시스템에서 음수를 표기하는 방법입니다.

0111은 십진수로 7인데 

0111의 1의 보수인 1000을 -7이라고 정의합니다.  

 

EX. 1의 보수를 사용하는 시스템에서  0110 음수로 표기하면?

1001 이 된다. >>> -6 이 됩니다.

0101은 십진수로 5인데 -5를 1의 보수체계를 사용하면 1010....

 

그럼 0000은???

-0은 그냥 0이니까 1111도 0으로 표현됩니다. 

1의 보수 사용시스템에서는 양수와 음수를 표기할 수 있게 되었다.

아래 그림과 같이 채워집니다.

 

위 테이블에서 1의 보수 부분을 스스로 채워보기 바랍니다.

 

 

18-3. 2의 보수 사용하는 시스템에서 음수를 표기하는 방법입니다.

1의 보수에서 감을 잡았을 것 같습니다. 

2의 보수 시스템에서는 0001이  십진수로 1입니다.

-1을 표기하려면 0001의 2의 보수로 표기됩니다.

즉 1111이 -1이 됩니다. 

 

특이하게 1000을 -8로 표기합니다.

 

다른 예시를 들어서 왜 그런지 알아보겠습니다. 

2의 보수를 구하는 방법은 비트를 반전시킨 뒤 1을 더하는 방법이 있었습니다. 

그래서 0010에서 비트 반전을 시키고 1을 더하면 (1100+1) 1110이 나왔습니다. 

 

음수에서 양수를 구하는 과정은 반대의 과정을 거친다고 생각하면 됩니다. 

1110에 1을 빼면 1101 여기 비트 반전을 시키면 0010이 나옵니다. 

 

 

원래 1000은 8이었습니다.

2의 보수 구하는 방법을 거꾸로 적용시키면?

1000에 1을 빼면 0111이 됩니다.

여기서 비트 반전을 시키면  1000이 됩니다.

그래서 1000을 -8로 정의하는 것입니다. 

 

 

 

여기까지의 설명만으로도 충분히 2의 보수 열에 있는 테이블을 채울 수 있을 것입니다. 

스스로 채워보기 바랍니다.

 

 

아래와 같이 표가 채워지게 됩니다.

 

 

18-4. Sign-Magnitude부분을 공부해보겠습니다.

MSB가 의미하는 것이 Sign입니다.

아래와 같이 MSB의  bit가 1이면 음수, 0이면 양수를 나타냅니다. 

 

 

MSB를 제외한 나머지 비트들은 Magnitude를 의미합니다.

그래서 Sign-Magnitude라는 이름이 붙었습니다.

 

 

 

아래와 같이 채울 수 있습니다.

아래의 표에서 형광펜의 윗부분은 4bit에서 MSB가 0이므로  모두 양수가 됩니다.

1111에서 MSB인 1은 Sign을 의미하고 

MSB를 제외한 111은 Magnitude를 의미합니다. 

1111은 -이면서 크기는 7이다. =-7이다. 

같은 방식으로 정의합니다. 

 


19. 표현 가능한 숫자의 범위를 알아보겠습니다.

4Bit를 다 양수로만 쓸 수도 있습니다. 아래와 같이 채워집니다.

4Bit를 Unsignednumber로 썼다면 표현 가능한 수는 0~15까지 입니다.

0부터 2의 4승 -1까지 라고 생각하는 것도 가능합니다.

 

 

동일한 4bit를 어떻게 사용할 것인지에 규칙을 정해놓은 것입니다.

Unsigned > 2의 보수 >... 부등호 크기로 많이 사용합니다.

 

 

※ 4Bit를 기준으로 사용할 수 있는 숫자의 범위 입니다. 

 

2의 보수를 사용하면

-8부터 +7까지 사용 가능하게 됩니다.

(1000~0111)

1의 보수를 사용하면 

-7부터 +7까지 입니다.

-(2^3-1) : 편한대로 표기.

 

sign-Magnitude를 사용하면

-7에서 +7까지의 숫자를 사용할 수 있습니다. 


19-2. 그러면 이제 n비트의 이진수의 표현 범위에 대해 이야기해봅시다.

 

 

 

일반화시켜서 생각해봅시다.

0부터 2의 n-1승까지 표현 가능합니다.

만약 2의 보수를 사용해서 표현하며 

-2의 n-1승부터 2의 n-1승-1까지 표현 가능합니다.

 

Ex1. 10진수 -37을 8bit의 형태로 표현해보시오. (2의 보수 시스템을 사용할 것)

 

1) 먼저 37을 2진수로 변환합니다.  (10진수를 2진수로 바꾸는 방법)

Succesive Division연속적인 나누기를 아래와 같이 합니다.

다음과 같은 2진수로 표현됩니다.

 

2 ) 6bit로 표현 되었으므로 앞에 0을 2bit추가시켜서 8bit로 만듭니다. 

00100101 이 됩니다. 

 

3) 그것의 2의 보수를 구하면 된다.

 

1) Bit wise inverse

11011010

 

2) 1을 더한다. 

11011011

 

Ex2. 10진수 -37을 16bit의 형태로 표현해보시오. (2의 보수 시스템을 사용할 것)

 

1)   EX1과 같이 Succesive Division을 사용해서 2진수로 변환하고,

2)   6Bit로 구성된 숫자이므로 앞에 0을 10개 더 추가하면 됩니다.

 

0000000000100101

 

3)   비트를 반전시킨 뒤 1을 더합니다. 

1111111111011011 이 됩니다.

-37의 16Bit 표현입니다. 

 


19-3. 비트 수 확장 (8bit 에서 16bit로 확장하는 경우) 이 부분은 무시해도 됩니다. 

 

숫자의 값은 변화시키지 않고 비트만 8bit에서 16bit로 확장시키고 싶다면

 

1. 2의 보수를 사용할 경우

 앞의 숫자가  0이면 0을 

앞의 숫자가  1이면 1을 쭉 채워주면 됩니다. 

 

16Bit는 앞의 10개가 1로 Packing 되었습니다. 1의 보수인 경우도 마찬가지입니다. 

 

 

2. Signed Number 에서 1의 보수를 사용할 경우

양수의 경우에 앞에 0을 채워주고 

음수의 경우에는 앞에 1을 채워줍니다.

(마찬가지)


1의 보수, 2의 보수와 약간 다릅니다. 

3. Unsigned의 경우

8Bit의 숫자가 있는데 크기는 변화시키지 않고 bit의 수만 늘려서 16Bit로 만들고 싶다고 하면 앞에 0을 채워주면 됩니다.

 

4..Sig-Mag의 경우

Unsigned와 마찬가지입니다.  (???)

 

 

 

비트수 확장에 대한 이야기는

메모리에 대해서 배울 때 더 자세 다룹니다.

 


19-4. Binary Representation of Floating-Point Number  이 부분도 무시하고 넘어가도 됩니다. 

간단하게 언급만 하고 넘어갑니다.

c언어에서 숫자가 어떻게 저장되는가?  2진수로 어떻게 변환되는가??

참고만 하면 됩니다. 

부동소수점형으로 변수를 초기화 할때, float로 또는  double로 define 할 수 있다.

 

float의 경우에는 32bit로 표현되고 

C언어에서 float a=69.2875라고 저장하면

a라는 이름을  가진 메모리 공간에서

32bit 공간을 확보하고 아래와 같은 이진수로 저장된다는 것입니다.

 

 

 

지수부분과 가수부분에 숫자가 들어가게 됩니다. 

 

반응형
Comments