자바에서 10진수를 16진수로 변환시

프로그래밍/JAVA 2013. 9. 10. 02:23

자바에서 10진수를 16진수로 변환시


자바에서 10진수를 16진수로 변환해서 출력하게 되면 아래와 같은 결과가 표시됩니다.

우선 자바에서 사용된 소스코드는 아래와 같습니다.

숫자를 int 형 변수에 담을 때와 double 형 변수에 담을 때의 출력값이 다르게 표시됩니다.

int 형 변수에는 익히 봐왔던 결과가 출력됩니다.

for( int i=1; i<20; i++){

System.out.print( i + ": \t");

System.out.println( Integer.toHexString(i));

}

========================================================

1: 1

2: 2

3: 3

4: 4

5: 5

6: 6

7: 7

8: 8

9: 9

10: a

11: b

12: c

13: d

14: e

15: f

16: 10

17: 11

18: 12

19: 13


따라서 double 일때의 결과값에 대해 살펴보겠습니다.

for(double d1 = 1.0 ; d1< 10.0 ; d1++) {  

  System.out.println(d1+" :  "+Double.toHexString(d1));  


========================================================

1.0 : 0x1.0p0

2.0 : 0x1.0p1

3.0 : 0x1.8p1

4.0 : 0x1.0p2

5.0 : 0x1.4p2

6.0 : 0x1.8p2

7.0 : 0x1.cp2

8.0 : 0x1.0p3

9.0 : 0x1.2p3


출력된 결과를 유심히 보면서 

과연 출력된 값의 의미가 뭘까 궁금했습니다.

우선 

0x1.0p0 를 보면 맨 앞의 두글자 0x 는 16진수를 나타내는 문자이며 1.0p0 는 10진수 1이 16진수로 변경된 숫자 입니다.

어떻게 10진수 1이 1.0p0 로 변경된걸까

우선 16진수를 10진수로 변경하는 공식은 1.0p0 가 a.bpc 라고 할때

(( a * 16 ^ 0 ) + ( b * 16 ^ -1 )) *  2 ^ c 입니다.

따라서 ((1 * 16 ^0) + ( 0 * 16 ^ -1)) * 2^0 이게 됩니다.


조금 복잡하게는 10진수 7인 0x1.cp2 는

(( 1 * 16 ^0 ) + ( 12 * 16 ^ -1 )) * 2 ^ 2 이게 됩니다.

( 1 + 12 / 16 ) * 4 = ( 4 / 4 + 3 / 4 ) * 4

= 7 이게 됩니다.


: