2010년 10월 5일 화요일

진법에 관하여~

진법

가장 간단한 진법은 1진법으로, 모든 자연수를 그 수 만큼의 숫자로 표현하는 것이다. 예를 들어서 숫자 7은 *******라고 표현할 수 있다. 일반적으로 1진법은 작은 숫자에 대해서만 유용하지만, 컴퓨터 과학 분야에서 사용되기도 한다.

1진법 표기는 좀 더 큰 값을 나타내는 다른 기호를 도입해서 간소화할 수 있다. 보통 이 기호들은 10의 거듭제곱을 표시하는 경우가 많다. 예를 들어서, *로 1을 나타내고, #로 10을 나타내고, @로 100을 나타낸다면, 403은 @@@@ ***로, 125는 @ ## *****로 간단하게 나타낼 수 있다. 고대 이집트 수 체계가 이러한 방법을 사용하며, 로마 숫자는 이 방법의 확장이다.

어떤 기호가 반복된 횟수를 나타내기 위한 특별한 기호를 도입해서 이를 더 간소화할 수 있다. 예를 들어서, 라틴 알파벳의 첫 아홉 글자(A부터 I까지)를 각각 "한 번"부터 "아홉 번"을 나타내기 위해서 사용한다면, 403이라는 숫자를 D@ C*라고 표현할 수 있다. 문자로 나타낼 때의 수 체계와 상관 없이, 한국어("사백 삼")와 영어("four hundred [and] three")를 비롯한 많은 자연어들이 이런 방법을 사용한다.

이보다 더 발전된 형태는 위치 기수법이다. 앞에서 사용한 "한 번"부터 "아홉 번"까지의 기호에 0을 나타내는 o라는 기호를 덧붙이고, 이 기호가 실제로 의미하는 값은 기호의 위치에 따라 10의 거듭제곱을 곱해서 표시한다고 하면, 2005라는 숫자는 BooE로 표현할 수 있다. 이때 0은 해당 거듭제곱을 "건너 뛰기" 위해서 필요하며, 다른 수 체계에서는 사용하지 않지만 매우 중요한 역할을 한다. 인도로부터 유래한 아라비아 숫자는 10을 밑으로 하는 위치 기수법으로, 현재 세계적으로 널리 쓰이고 있다.

위치 기수법을 사용한 계산은 앞에서 설명한 다른 기수법을 사용할 때보다 훨씬 쉽다. 또한 위치 기수법은 가능한 어떤 숫자를 표현하기 위해서 무한히 많은 기호를 도입할 필요가 없다. 예를 들어서 아라비아 숫자의 경우 0부터 9까지의 10개의 기호만으로 모든 자연수를 표현할 수 있다.

10진 위치 기수법은 현재 가장 널리 사용되고 있다. 이는 인간이 열 개의 손가락을 가지고 있다는 데서 유래한 것으로 보인다.

현재까지 역사적으로 사용되었거나 현재 사용되고 있는 기수들은 2, 3, 4, 5, 6, 7, 8, 9, 10, 12, 16, 20, 60이 있다. 그 중 2진법과 8진법, 그리고 16진법은 컴퓨터에서 자주 사용된다.






1. 진법 계산

10진법을 다른 진법으로 변환시키는 방법
10진법의 수를 다른 진법으로 나누어서 그 나머지를 취한 결과를 의미한다.

10진법을 8진법으로 변환시키는 방법
예) 10진수 259를 8진법으로 변환
259를 8로 나눈후 나머지 값을 뒤에서부터 쓰면 된다.

10진법을 2진법으로 변환시키는 방법
예) 10진수 125을 2진법으로 변환
125를 2로 나누어서 그 나머지를 뒤에서부터 쓰면 된다.

10진법을 16진법으로 변환시키는 방법
예) 10진수 735를 16진법으로 변환
735를 16으로 나누어 그 나머지를 뒤에서부터 쓰면 된다.

다른 진법을 10진법으로 변환시키는 과정
8진법을 10진법으로 변환시키는 과정
예) 8진수 413을 10진법으로 변환
4 * 82 + 1* 8 + 3 * 1

2진법을 10진법으로 변환시키는 과정
예) 2진수 1101을 10진법으로 변환
1 * 23 + 1 * 22 + 0 * 2 + 1 * 1

16진법을 10진법으로 변환시키는 과정
예) 16진수 AC5를 10진법으로 변환
A * 162 + C * 16 + 5 * 1 =

2진법을 8진법으로 변환시키는 방법
2진수 11011011011001을 8진법으로 변환시키는 과정
오른쪽부터 3bit씩 묶는다.
11 011 011 011 001


11011011011001(2) =33331(8)


2진법을 16진법으로 변환시키는 방법
①2진수 1110101011011를 16진법으로 변환시키는 과정
②오른쪽부터 4bit씩 묶는다.
1110101011011(2) = 1D5B(16)

8진법을 16진법으로 변환시키는 방법
8진수 1572를 16진수로 변환
8진수 1자리를 2진수 3bit로 펼쳤다가 2진수 4bit씩 오른쪽부터 묶는다.
1572(8) = 37A(16)
소숫점 이하 자릿수의 진법 변환
10진법을 8진법으로 변환시키는 과정
8진법을 10진법으로 변환시키는 과정
2진법을 10진법으로 변환시키는 과정


2. 진법의 연산

덧셈
10진수에서 더한 값이 10이 되었을 때 자리 올림(Carry)이 발생하듯이, 2진수에서는 더한 값이 2가 되면 자리 올림이 발생한다.

뺄셈
전자계산기에서의 뺄셈은 빼는 수의 보수를 더하여 계산한다.

보수는 2의 보수와 1의 보수가 존재한다.

2진수의 보수
1의 보수 : 각 자리값을 1은 0으로, 0은 1로 바꾸어 구한다.
2의 보수 : 1의 보수와 1을 더해서 구한다.
보기) 01001의 보수

1의 보수 : 10110
2의 보수 : 10111
1의 보수를 이용한 뺄셈
빼는 수의 1의 보수를 더한다.

자리 올림수(Carry) 발생시 : 자리 올림수를 버린다.

자리 올림수(Carry) 미발생시 : 결과값의 2의 보수를 산출한 후 부호 -를 붙인다.

예 1) (11101)2 - (00110)2의 계산


11101

+ 11010 (←00110의 2의 보수)

올림수는 버린다← 110111

올림수가 발생했으므로 올림수를 버린 나머지 결과가 최종 결과값이다.

(11101)2 - (00110)2 = (10111)2

예2) (1001)2 - (1101)2 의 계산
1001 .

+ 0011 (←1101의 2의 보수)

1100

올림수가 발생하지 않았으므로 결과값 1100의 2의 보수를 구하면, 0100이 나오고 이 값에 (-)를 붙인 값이 최종 결과값이다.

(1001)2 - (1101)2 = (-0100)2


곱셈과 나눗셈
2진수의 곱셈은 덧셈의 반복으로, 나눗셈은 뺄셈의 반복으로 이루어진다.

3.진법 변환

댓글 1개: