본문 바로가기

Lobo's study room/c lang.

부호 절대치 표현과 보수

#컴퓨터의 기능적인 정의

사용자가 입력한 정보를 가공해서 사용자에게 유의미한 정보를 보여주는 매체.

즉, 정보처리 기계

 

자료는 처리가능한 데이터 뿐만 아니라 명령도 같이 생각하자!

 

순서대로 명령과 데이터를 cpu로 가져와서 처리를한다.

 

컴퓨터가 사용할 수 있는 데이터에는 비트가 있다!

비트가 하나 늘어나면 정보처리의 개수는 2배가 된다!

 

8비트는 256

10비트 1024

16비트 65356

32비트 약 42억

 

1KB = 2의 10승(1024) B

1MB = 1024KB = 1024 * 1024 KB = 2의 10승*2의 10승 B = 2의 20 B

1GB = 2의 30승 B

1TB = 2의 40승 B

피코...

 

SSD는 256, 512...

 

메모리 크기는 8GB, 16GB...

 

보조기억장치는 TB 단위.

메모리 크기는 GB 단위.

 

WINDOWS 32BIT 주 기억장치 램의 크기는 4GB

4GB이상은 WINDOWS 64BIT

 

4GB 메모리 각각의 공간에 주소를 붙이려면...

4 GB = 4 * 2의 30승 바이트 = 2의 32승 바이트...

4기가 넘어가는 메모리를 쓰려면 32비트 이상을 사용해야 한다.

 

#숫자

컴퓨터에서 표현할 수 있는 숫자에는 정수(integer)와 부동소수점(floating point Number) 2가지 종류가 있다!

 

정수(integer)

ex) 3bit에서는 정수로 표시할때, 정보표현의 개수 8개 표현 가능.

 

부호를 생각하지 않을때..(sign)

000    0.   

001     1

010.    2

011.     3

100.     4

101.      5

110.      6

111.       7

 

#부호 절대치 표현

b2.b1.b0 비트가 3개가 있을때 부호를 표현해야 하므로!

부호 비트가 -이면 음수, +면 양수!

 

경우의 수는 총 8가지 : 부호 절대치 표현

 

  부호 절대치 1의 보수 2의 보수
+3 011 011  
+2 010 010  
+1 001 001  
+0 000 000 000
-0 000 111 1000
-1 101 110    111
-2 110 101    110
-3 111 100    101
         100

+0과 -0의 코드값이 다르다.

2의 보수는 코드값이 값다. 올림수가 발생해서 자리수가 1개 더 생긴거!

이때 발생한 맨 앞의 1은 cpu안의 상태메시지의 carry bit(올림수비트)가 1로 세팅되고 끝남.

즉, 컴퓨터에서 2진수를 나타낼때 2의 보수를 사용한다.

 

#보수

오늘날의 컴퓨터는 부호 절대치 표현을 쓰지 않고, 보수(complement) 를 사용한다.

9의 보수는 1

6의 보수는 4

 

즉, 합해서 10이되는 숫자!

 

13-7?!

3에서 10을 뺄수없으니까 10의 자리에서 1를 빌려와서 10에서 7을 빼면 3이나온다. 3을 다시 3에 더해줘서 6이 나온다.

10진수의 9의 보수는?

합해서 9가 되는 숫자.. 7의 9의 보수는 2. 6의 9의 보수는 3.

 

2의 보수는 합해서 10 즉 2가 되는 숫자.

0 10 

1    1 

 

1의 보수는 합해서 1이되는 숫자.

0 1

1 0

즉, 1의 보수는 반대(1을 0으로 0을 1로 바꾸는 숫자)

 

2의 보수와 1의 보수의 관계:

1의 보수 + 1 = 2의 보수

 

ex)3비트를 사용하는 컴퓨터에서 2의 보수를 사용해서 정수를 표현한다면

수의 표현 범위는 -4부터 +3까지 표현가능.

즉, 범위를 벗어났기에 4를 표현할 수 없다.

+4를 표현하려면 비트를 늘려줘야 함.

4비트를 사용해준다면 -8부터 +7까지 표현가능.

 

ex)16비트를 쓸건데 2의 보수를 정수표현하는 컴퓨터가 있다면...

신사임당 처리가능한가요??? 50000

 

아니요... 65536... 즉 -32768부터 +32767까지만 표현가능합니다.

비트를 늘려주어야 합니다.

16비트로 안되면 32비트로 늘려서 처리해야함. :)

 

ex)32비트 2의 보수 정수...

로또 당첨금 처리가능한가요??? 금액에 따라 다름.. 100억일때는???

약 42억...

-21억~+21억... 

 

따라서 정수 범위를 사용한다면 수의 표현범위를 생각해주고 프로그래밍을 하고 만약 부족하다면

비트를 2배씩 늘려주거나 부호를 쓰지않고 표현할 수 있을까? 생각해주기! (부호를 안써준다면 표현가능하기두 함)

 

n개의 비트를 쓸때 2의 보수를 사용해서 정수를 표현하는 경우 수의 표현범위는?

 

-2의 n-1승 ~ 2의 n-1승-1

 

[-2의 n-1승, 2의 n-1승]

 

2가지로 표현가능하다!

 

 

 

 

 

 

'Lobo's study room > c lang.' 카테고리의 다른 글

ASC II 코드와 UNI-code  (0) 2022.04.11
부동소수점과 정규화  (0) 2022.04.11
컴퓨터와 비트  (0) 2022.04.09
Queue, Circular Queue, Linked list  (0) 2022.02.14
C lang. 개발 환경 세팅  (0) 2022.01.14