진수 변환
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
'프로그래밍' 카테고리의 다른 글
CronExpression Test 하기 (0) | 2016.03.17 |
---|---|
jedis returnBrokenResource 메서드에 대한 오해 (0) | 2016.03.09 |
Mybatis 쿼리 로그 출력 (0) | 2016.03.02 |
비트단위의 논리곱을 이용한 데이터 활용 방법 - 논리곱(and) & (1) | 2016.01.31 |
MyBatis 샾(#) 달러($) 차이 (4) | 2016.01.21 |
tag 라이브러리 동작 원리에 대해서 생각해 보자 (0) | 2016.01.18 |
Spring Scoped Proxy Beans (prototype 빈 DI로 주입해서 사용) (0) | 2016.01.14 |
Java Generic 정리 (3) | 2016.01.13 |