진수 변환

프로그래밍|2016. 1. 26. 14:33


2진수에서 16진수, 10진수에서 16진수로의 변환에 대해 자주 까먹어서 정리해 본다. (나 요즘 정리 엄청 좋아하는 듯)


변환하기에 앞서 진수에 따른 데이터 표현 방법은 다음과 같다.

2진수는 0, 1

10진수는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9

16진수는 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F



10진수 -> 2진수


10진수 23이 있다고 하자. 이를 2진수로 바꾸는 방법은 23을 2로 계속 나누면 된다. (나눌 수 없을 때까지)

23 / 2 = 11 나머지 1

11 / 2 = 5 나머지 1

5  / 2 = 2 나머지 1

2  / 2 = 1 나머지 0


위의 계산식에서 맨 마지막의 몫과 나머지들을 아래에서부터 위로 나열을 하면 10111 이 될 것이고, 1바이트는 8bit이니깐 앞에 0을 3개 채워주면 다음과 같을 것이다.

00010111





2진수 -> 16진수


위의 10진수 23을 2진수로 바꾸면 00010111 값이 나오게 된다는 것을 알 수 있다.

그럼 2진수 00010111 를 16진수로 변환하는 방법에 대해서 확인해 보자.


00010111를 다음과 같이 4비트씩 쪼갠다.

0001 0111

쪼갠 4비트 각각을 2진수 -> 10진수 변환하는 방법을 이용해서 계산을 하게 되면 17이 나오게 된다.

결과로 나온 17 값을 그대로 쓰면 10진수로 보이기 때문에 16진수 앞에는 0x 를 붙여주게 된다.

결론은 0x17 이 16진수 값이 된다.







테스트


@Test

public void test() {

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

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

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

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

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

 

        System.out.println();

        System.out.println(Integer.toBinaryString(23));

        System.out.println(Integer.toBinaryString(48));

        System.out.println(Integer.toBinaryString(85));

        System.out.println(Integer.toBinaryString(123));

        System.out.println(Integer.toBinaryString(2048));

}



## 결과값


0x17

0x30

0x55

0x7b

0x800


10111

110000

1010101

1111011

100000000000


댓글()