2015년 6월 17일 수요일

20150618 컴퓨터가 데이터를 표현하는 방식(정수)








char = 1byte = -128~127
unsigned char = 1byte = 0~255

모든 컴퓨터의 정수체계 = 정수를 2의보수방식으로 저장(정수만 적용)
컴퓨터는 -연산을 안함

초등1의 수학에서 보수는 10 이되는 두 수를 의미합니다.

8bit정수 1byte (-128)~(+127)
2진수 1 1 1 1 1 1 1 1 = -127
        ↑
        (+),(-)표시부호(0=(+)/1=(-))이방식은 덧셈 불가능으로 사용하지 않음
그러나 실제 저장방식이 아래와 같으므로 음수값을 찾을때 첫자리가 1이면 음수!

128~255를 0뒤로 이동시켜 저장 실제 저장은 128~255이나 -1부터 표시 회로를 만듬!
-128     -255     0     127     128     255
   |          |       |        |         |         |
-128     -1                          |
  ^                                    |
 └------------------------------┘

10진수 123의 10의 보수 / 9의 보수
  123      123
+877    +876
---------------
1000      999
10의 보수를 빠르게계산하기위해 9의보수를 구하여 1더함

1의보수 = 위아래를 change
  1       0
+0     +1
-----------
  1       1

2의 보수 = 1의보수를 구하여 1더함
  1101       1101
+0011     +0010
-------------------
10000       1111

  00000011(3)
+11111110(-2)
-----------------
  00000001(1)

보수=

최상위 자릿수를 제외한 자릿수를 0으로 만드는 수라고 하면 이해가 쉬우실까요?

예를 들어 3300의 보수는 6700 이 됩니다.. 이 두수의 합은 10000이고 원래 두수의 자릿수가 4자리수 이므로 4자릿수까지 0으로 만들게 되기에 보수가 됩니다. 또한 96700도 보수가 됩니다.. 기준이 어디냐에 따라서 보수의 선택을 하셔야 됩니다.

컴퓨터에선 덧셈밖에 안되죠.. 뺄셈은 2의 보수를 사용한 덧셈을 응용한 방식을 사용하구요. 곱셈과 나눗셈 역시 덧셈을 이용해 처리하죠..

뺄셈을 예로 들어 설명해드릴께요
컴퓨터는 2진수를 씁니다.

10진수 10을 2진수로 표현하면 1010 이 됩니다. A
10진수 2를 2진수로 표현하면 0010 이 됩니다.. B

A-B를 계산한다면 B에다가 2의 보수를 취해서(항상 뒷수에 취합니다.)
1010+1110이 되죠.(1110+0010=10000 보수 맞죠?)
계산해보면 11000이 됩니다. 뺄셈은 자릿수가 증가하는 일이 없겠죠?
증가된 자릿수를 제외하면 1000이 됩니다. 이는 10진수 8이므로 계산이 맞죠?

이젠 반대로 해보겠습니다. B-A 이면 A에다가 2의 보수를 취해서..
0010+0110이 됩니다. 
계산해보면 1000이 됩니다. 하지만 B와 A에 크기비교시 A가 더 큰수이므로
-를 취하고 다시 2의 보수를 취해줍니다. 
-(1000의 2의 보수) = -(1000) 이 되네요.. -8 맞죠?

http://kin.naver.com/browse/db_detail.php?dir_id=101&docid=70626

0.0=를 2진수로 계산할때
점을 기준으로2의0승부터++/2의-1승~부터--
0.1과 짝수인 소수점은 무한루프연산이라 표현불가!

댓글 없음:

댓글 쓰기