티스토리 뷰

2진수는 1과 0으로 이루어진 수이다.


10진수는 0~9까지의 수이다.


8진수는 0~7까지의 수이다.


16진수는 0~9 A~F까지의 수이다. 단일로 나타낼 수 있는 값이 0부터 9까지이기 때문에 문자로 대체된다.




n진수의 10진수로의 변환


임의의 진수를 10진수로 변환하는 방법은 쉽다. 

맨 우측의 가장 작은 값을 시작으로 해서 인덱스(n)를 0으로 잡는다고 하자 


만약 1100이라는 이진수가 있다면 맨마지막 값(오른쪽 첫번째)인 0의 n값은 0이고, 그 다음에 위치하는 0의 n값은 1이다. 이렇게 차례대로 2, 3......를 가지게 될 것이다.


이제 각 자리는 2진수이기 때문에 (2 x 자리값)으로 계산해서 처리해주고, 다시 그 값들을 전부 더해주면 된다.


그렇기 때문에 최종적으로 계산형태는


(1 x 2³) + (1 ) + (0 ) + (0 x 2)의 형태가 된다. 그러므로 이진수 1100의 값은 12가 된다.




8진수나 16진수의 10진수 변환 계산법도 이와 다르지 않다.



8진수 값인 227을 10진수로 변환한다면 


(2 x 8²) + (2 x 8¹) + (7 x 8)의 형태가 되며 8진수의 10진수 변환 결과는 151이 된다.


2진수의 계산법에서 제곱을 해주는 대상이 8진수로 바뀌었기 때문에 8로 치환해준 것 뿐이다.



그래서 16진수 142도 10진수로 변환하면


(1 x 16²) + (4 x 16¹) + (2 x 16) = 322가 된다.




다음은 java코드상으로 8진수와 16진수의 10진수 변환 결과를 출력하고 있다.

java에서는 println() 출력시 자동적으로 10진수 형태로 표현 된다.





10진수를 n진수로 변환


10진수를 2진수로 변환하는 방법은 10진수의 값을 2로 나누어 나온 나머지 값을 역으로 나열하면 된다.


10진수 값 52를 2진수로 표현한다면..


2

52

 

2

26

...... 0

2

13

...... 0

2

6

...... 1

2

3

...... 0

 

1

...... 1


나누었을 때 나머지가 위의 결과와 같다. 이제 이 값들을 역으로 나열하면 110100이 된다. 바로 이 값이 10진수 52의 2진수 값이다.



이제 10진수 52를 8진수와 16진수로 변환해보겠다.


방법은 10진수 52의 2진수 값인 110100에서 8진수는 각 자리를 3개씩 분할하고, 16진수는 4개씩 분할한다.


10진수 52값이 110100이니 3개씩 분할하면 110 / 100 이 될 것이다. 

110은 이진수 계산법으로 6,

100은 4가 된다.


두 수를 붙이면 52의 2진수 값이 나온다. 바로 64이다.


16진수는 4개씩 분할 하니까 11 / 0100 이 될 것이다. 그러면

11은 3

0100은 4가 된다.


역시 두 수를 이어 붙이면 16진수 값이 나온다. 34가 된다.




java코드로 이 결과를 테스트 해보겠다.


'JAVA > 정리' 카테고리의 다른 글

java enum 열거형  (0) 2014.01.22
HashSet, TreeSet  (0) 2014.01.21
[Collection Framework] ArrayList, LinkedList  (0) 2014.01.16
Exception 예외처리  (0) 2013.12.30
증감 연산자, 부호 연산자, 비트 연산자  (0) 2013.12.10
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
more
Total
Today
Yesterday