이 블로그 검색

2012년 3월 31일 토요일

2진수, 10진수, 16진수 변환


1. 부호없는 2진수 => 8진수, 10진수, 16진수로의 변환

 ## 8진수와 16진수로의 변환은 2진수에서 뒤에서부터 각 3자리, 4자리로 끊어서 더하면 된다.
ex) 101011(2) 8진수 => 101/011 = 53(8), 16진수 => 10/1011 = 2B(16)


 ## 10진수로의 변환은 1인 자리의 숫자들에 2의 제곱 형식을 취해서 전부 더해주면 된다.
ex) 101011(2) 10진수 => 2의 5제곱 + 2의 3제곱 + 2 + 2의 0제곱(1) = 32+8+2+1 = 43


2. 부호없는 8진수, 10진수, 16진수 => 2진수로의 변환

 ## 8진수와 16진수는 1번을 역으로 하면 되기 때문에 간단하다. 즉, 각 자리를 8진수면 3자리, 16진수면 4자리로 나누어서 2진수 형식으로 표현하기만 하면된다.
ex) 2B(16) = 0010/1011(2), 53(8) = 101/011(2)

 ## 2진수로의 변환은 10진수를 2로 계속 나눈 나머지들을 순서대로 나열하면 되는데, 가장 마지막으로 나눈 나머지부터 순서대로 나열한다.
ex) 43 =>


나눗셈 몫 나머지
43/2 21 1
21/2 10 1
10/2 5 0
5/2 2 1
2/2 1 0
1/2 0 1


따라서 마지막으로 나온 나머지부터 순서대로 나열하면,
101011(2) 가 나온다.

3. 부호없는 16진수와 10진수 사이의 변환

 ## 16진수 => 10진수
1번에서의 2진수에서 10진수로의 변환과 같은 방식이다.
대신, 2의 제곱대신 16의 제곱을 취해서 전부 더하면 된다.

 ## 10진수 => 16진수
2번에서의 10진수에서 2진수로의 변환과 같은 방식이다.
단지, 2로 나누는 대신 16으로 나누면 된다.

4. 부호있는 정수의 2의 보수 표기

 ## 컴퓨터메모리에서는 음수를 표현하기 위해서 sign bit를 활용합니다. sign bit 가 1인 경우 음수에 해당합니다. 따라서 컴퓨터입장에서의 연산( A - B => A (-B)와 같은)을 이해하기 위해서는 보수표기에 대한 이해가 필요합니다. 컴퓨터 메모리의 기본단위는 BYTE이다. 1BYTE는 8bits로 이루어져있기 때문에 기본적으로 8자리의 2진수를 다루겠다.

 ## 2진수의 2의 보수 표기
메모리에서의 2진수 11111111(2)은 -1을 의미한다.
00000001(2)은 1을 의미하는데, 보수란 음수의 표기를 위해 나온 개념이다.
2의보수 표기법은 전체비트를 반전시킨 후, 1(2)을 더하면 된다.
즉, 00000001(2) => 11111110(2), 여기에 1을 더하면 11111111(2)
따라서 컴퓨터에서는 -1의 개념을 도입하기 위해서 11111111(2) 로써 쓰는 것이다.

 ## 16진수의 2의 보수
마찬가지로 2진수를 취한후, 전체 비트를 반전시키고 1을 더하면 된다.
또는, 16진수 자체에서도 구할 수 있다. 각 자리 숫자를 15에서 뺀 뒤, 마지막으로 1(16)만 더해주면된다.
ex) 6A3D(16) => 95C2(16) +1(16) = 95C3(16)

5. 부호있는 정수의, 서로 다른 진법 사이의 변환

 ## 2진수 => 10진수
양수 2진수인 경우는 부호없는 경우(1번)에 해당한다.
음수 2진수인 경우 sign bit가 1인 경우로써, 바로 10진수를 알아내기힘들다. 따라서 2의 보수를 취해서 양수 2진수를 취한후, 10진수를 알아내고 '-'기호만 붙여주면 된다.
ex) 11110000(2) => 00001111(2) +1 = 00010000(2) = 16, -16(마이너스 기호 첨가)

 ## 10진수 => 2진수
10진수의 절대값을 2진수로 변환한후, 원래의 10진수가 음수였을 경우, 얻은 2진수의 2의 보수를 구한다.
ex) -43 => |43| => 00101011(2) => 11010100(2) + 1(2) = 11010101(2)

 ## 10진수 => 16진수
10진수 정수의 절대값을 16진수로 변환 후, 10진수 정수가 음수였을 경우에는 얻은 16진수의 2의 보수를 구한다.

 ## 16진수 => 10진수
16진수 정수가 음수인 경우 2의 보수를 구하고, 그렇지 않으면 바로 10진수로 변환한다. 원래의 16진수가 음수였으면, 10진수 정수에 '-'기호를 붙인다.

6. Advice

위의 이론에 따르면 진수의 변환과 보수의 개념에 대해서 굉장히 혼란스러울지 모르겠다.
그래서 내가 이해하고 있는 방식으로 약간의 설명을 드리겠다.
2진법, 8진법, 16진법사이에는 2의 제곱 형식으로 구성되어 있기 때문에, 2진수에서 8진수, 16진수로의 또는 8진수, 16진수에서 2진수로의 전환이 쉽게 이루어 진다.(1, 2번 참고)


다만 까다로운 부분은 10진수로의 변환, 또는 10진수에서의 변환이다.
10진수는 우리가 실질적으로 사용하는 숫자개념이지만, 2의 제곱 형식(메모리구조)으로 이루어져 있지 않기때문에, 메모리에서의 수를 이해하기 위해서, 억지로 변환을 시도하는 것이기 때문이다.
따라서 10진수에서, 또는 10진수로의 변환에 대해서만 패턴을 익히면 금방 숙달이 될 것이다. 참고로 2진수에서 10진수로의, 10진수에서 2진수로의 변환만 익히면, 8진수, 16진수의 변환도 같은 방식이라는 것을 깨달을 것이다.


그리고 2의 보수개념은 2진수이건 8진수, 10진수, 16진수 무엇이든간에 2진수에서 sign bit(최상위 비트)가 1이면 음수이기 때문에, 또 그 상태에서 수의 크기를 측정하기 힘들기 때문에, 알기 쉽게 양수 형식으로 구현하기위해서 그 수의 2의 보수를 구하는 것이라 보면 된다.


제 글이 도움이 되었으면 좋겠습니다. ^^
잘 이해되지 않는 부분들에 대해서는 댓글을 달아주세요 ^^
감사합니다.

출처 : 본인 작성

댓글 없음:

댓글 쓰기