티스토리 뷰

728x90
반응형

수 체계와 변환

R 진법 체계 : 숫자의 자릿수와 관련이 있는 표기법으로 각 자리의 숫자에 자릿수에 비례하는 가중치가 부여된다는 점이 특징이다.

어떤 R 진법의 경우, 0 ~ R-1의 숫자를 사용하며 R> 10인 경우, 수를 표기하기 위해 알파벳을 사용하기도 한다.

R 진법에서 소수는 가중치인 거듭제곱에서 지수의 음과 양을 나눈다.

2진법에서는 소수점 아래 첫 번째 자리의 가중치가

.

  과 같다.

 

각 체계에서 다른 체계로 변환할 수 있다. 다만 10진법이 아닌 진법에서 10진법이 아닌 진법으로 변환하는 것은 추천되지 않는다. 해당 진법에서의 연산규칙(연산 테이블)을 고려해야 하며 그것은 우리가 익숙하지 않아 시간이 오래 걸리기 때문이다.

예로 들면 다음과 같다.

.

쉬운 예이지만 4진법의 곱셈과 덧셈을 해야 한다.

 

진법을 변환하는 더 좋은 방법이 있다. 힌트는 위의 식에 이미 등장했다. 바로 중간 과정으로 우리가 익숙한 10진법을 끼워 넣는 것이다.

R 진법에서 10진법 변환은 위의 식처럼 각 자리의 숫자*가중치의 합으로 나타내면 된다. (power expansion series)

10진법에서 R 진법 변환은 소수점을 기준으로 division method, multiplying method 두 가지가 있다.

 

division method의 경우,

10진수 숫자가 1 이상일 때 사용한다. 10진수 숫자를 R로 계속 나누며 나머지를 추출하는 방식인데, 이 나머지가 R 진법의 각 자리에 놓일 숫자가 된다. 가장 오른쪽부터 추출되므로 나머지를 오른쪽에서 왼쪽으로 쓰면 된다.

 

multiplying method의 경우

10진수 숫자가 1 이하일 때 사용한다. 10진수 숫자를 R로 계속 곱하면서 소수점 왼쪽의 정수를 추출하는 방식이다. 소수점 왼쪽 정수를 추출하면서 1 이하 소수에 계속 R을 곱하면 되는 데 무한순환소수의 경우 끝나지 않으므로 필요한 만큼 추출해서 사용한다. 숫자는 왼쪽에서 오른쪽으로 쓰면 된다.

몇 가지 진법 변환은 간단한 관찰을 통해 해결할 수 있다. 2진법에서 16진법 변환이 그러한 경우이다. 2진법의 네 자리가 16진법의 한 자리와 대응한다는 점을 활용하여 변환하면 된다. 다만 반드시 네 자리씩 변환해야 하므로 양 끝에서 숫자가 부족하다면 0을 채워 넣어야 한다.

 

이진 연산

전자공학이나 컴퓨터에서는 이진 연산을 하는 회로를 개발하기가 상대적으로 편하므로 이진 연산을 많이 사용한다. 10진 연산과 거의 비슷한 방식으로 진행되지만, 연산 테이블이 약간 다르다.

 

덧셈                                             뺄셈

1 + 1 = 0(carry 1)                            1 1 = 0

1 + 0 = 1                                       1 0 = 0

0 + 1 = 1                                       0 1 = 1(borrow 1)

0 + 0 = 0                                      0 0 = 0                         etc.........나눗셈 곱셈도 있지만 더 이상은 생략한다.

 

음수의 표기

대부분의 표기법에서 0을 양으로 1을 음으로 규정하여 사용한다.

1‘s complement, 2’s complement, sign and magnitude 체계에서도 그렇다.

 

각 체계에 관해 설명하면 다음과 같다.

1‘s complement, sign and magnitude에서 숫자의 범위는

.

 이고 0이 두 개다. (minus 0, plus 0;;;)

2’s complement에서는

.

 이고 0은 한 개다.

 

sign and magnitude의 경우 직관적으로 이해하기는 편리하나 해당 연산을 수행하는 회로를 만들기는 까다로워서 대개 2’s complement로 변환, 연산한다.

그래서 아무튼 여러모로 편하므로 2’s complement를 많이 사용한다.

 

2’s complement number system을 설명하면 다음과 같다.

양수는 sign and magnitude system과 그 방식이 같다. 다만 음수의 표기에서 차이가 있다. 음수는 해당 값과 절댓값이 같은 양수가 N일 때

.

과 같다.

.

의 보수라는 것에 주목하길 바란다. 특정 bits에서 양수에 대한 조합으로 대부분의 음수가 결정된다.

하지만 모든 음수를 양수의 보수로 결정할 수 없다. 100000 이런 조합은 양수의 보수로 값을 확인할 수 없다. 대신 MSB1이라는 점에서 음수라고 유추할 수 있고, 절댓값을 구하고자 보수를 계산하면 값이 같은 bitsbinary에서의 값과 같다는 것을 알 수 있다. 따라서 값은

.

이다. 이 부분 덕분에 2’s complement number system에서 0의 개수를 줄이고 표현 가능 범위를 1만큼 증가시킬 수 있다.

 

2’s complement에서 음수의 표현을 얻는 방법은 2가지가 있다.

1.

.

이므로

.

로 식을 변형할 수 있다.

.

1111111……. 이고 이 수에서 N을 빼는 것은 Nbits를 전부 역전(01, 10으로)시키는 것과 같다. Complementing N bit by bit라고도 한다. 그런 다음 1을 더하면 끝난다..

2. 오른쪽 bits부터 검사를 시작하는데, 최초로 1이 나오면 1을 포함하여 그 오른쪽의 0들만 제외하고 모두 역전시킨다. 그러면 끝이다.

 

2’s complement system의 진가는 연산에 있다. 오로지 덧셈만으로 덧셈과 뺄셈을 모두 수행할 수 있다. 음수를 보수로 표현했기 때문에 가능한 일이기도 하다.

 

규칙은 다음과 같다.

1. 2진법에서 하던 것처럼 모든 bits를 더한다.

2. MSB(most significant bit : 최상위 비트)sign bit에서 carry(자리 올림)가 발생하면 무시한다.

 

오버플로가 발생하지 않는다면 해당 규칙은 모든 수의 조합에 대해 올바른 결과를 도출한다.

양과 음의 합, 제한된 범위의 양과 양의 합, 제한된 범위의 음과 음의 합에서는 오버플로가 발생하지 않는다. 제한된 범위란 해당 bits에서 표기 가능한 범위를 이른다. 이외에는 오버플로가 발생한다.

오버플로가 발생하는 원인은 결괏값이 해당 bits에서 표현 가능한 범위를 넘어섰기 때문에 n+1 bits가 필요하므로 정해진 bits 내에서는 잘못된 값이 출력되는 것이다. 그래서 계산할 때 입력값들의 부호나 범위를 잘 관찰해서 오버플로가 발생할지 하지 않을지 확인해야 한다.

오버플로가 발생했을 때 특징은 양수 + 양수에서 sign bit1을 출력하고 음수 + 음수에서 sign bit0을 출력하는 것이다. 이를 통해 쉽게 구분할 수 있다.(양수 + 양수, 음수 + 음수에서 sign bit 관찰하면 오버플로의 확인 가능)

 

 

728x90
반응형
반응형
250x250
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함