Java 진법 2

2021. 5. 26. 18:00Java

8진법과 16진법

2진법은 오직 0과1, 두 개의 기호만으로 값을 표현하기 떄문에, 2진법으로 값을 표현하면 자리수가 상당히 길어진다는 단점이 있다. 이러한 단점을 보완하기 위해 2진법 대신 8진법이나 16진법을 사용한다.

8진수는 2진수 3자리를, 16진수는 2진수 4자리를 각각 한자리로 표현할 수 있기 때문에 자리수가 짧아져서 알아보기 쉽고 서로 간의 변환방법 또한 매우 간단하다.

2진법 - 0 1 // 2개

8진법 - 0 1 2 3 4 5 6 7 // 8개

10진법 - 0 1 2 3 4 5 6 7 8 9 // 10개

16진법 - 0 1 2 3 4 5 6 7 8 9 A B C D E F // 16개

8진법은 값을 표현하는데 8개의 기호가 필요하므로 0~7개의 숫자를 기호로 사용하면 되지만, 16진법은 16개의 기호가 필요하므로 0~9의 숫자만으로는 부족하다.

그래서 6개의 문자(A~F)를 추가로 사용한다. 예를 들어 16진수 A는 10진수로 10이고, F는 15이다.


2진수를 8진수로, 16진수로 변환

2진수를 8진수로, 변환하려면, 2진수를 뒤에서부터 3자리씩 끊어서 그에 해당하는 8진수로 바꾸면 된다. 8은 2의3승이기 때문에, 8진수 한 자리가 2진수 3자리를 대신할 수 있는 것이다. 2진수를 16진수로 변환하는 방법 역시 이와 비슷한데, 3자리가 아닌 4자리씩 끊어서 바꾼다는 점만 다르다.

 

1010101100인 2진수를 8진수로 변환하면 1254가 나오고, 16진수로하면 2AC가 나온다. 풀이를 보자면 8진수는 뒤에서부터 3자리씩 계산하고, 16진수는 뒤에서 4자리씩 계산하면 해답이 나온다! 8진수부터 1010101100 뒤에서부터 3자리 100 - 4, 101 - 5, 010 - 2, 1 - 1 그래서 1254가 나온다. 16진수는 1010101100 뒤에서부터 4자리 1100 - C, 1010 - A, 10 - 2 그래서 2AC가 나온다.


정수의 진법 변환

10진수를 n진수로 변환 - 10진수를 다른 진수로 변환하려면, 해당 진수로 나누고 나머지 값을 옆에 적는 것을 더 이상 나눌 수 없을 떄까지 반복한 다음 마지막 몫과 나머지를 아래부터 위로 순서대로 적으면 된다.

글로 설명하니까 복잡한 것 같지만 사실을 쉽다. 예를들어 10진수 46을 2진수로 변환하려면, 46을 2로 나누고 그 몫과 나머지를 아래의 그림과 같이 적는다.

이제 마지막 몫부터 나머지를 아래서 위로 순서대로 적기만 하면 2진수로 변환한 결과가 된다. 10진수를 8진수 또는 16진수로 변환하려면 2대신 88이나 16으로 나누면 된다. 즉, n진수로 변환하려면, n으로 반복해서 나누기만 하면 되는 것이다.

10진수 816을 8진수로 변환
10진수 1615를 16진수로 변환
10진수를 10진수로 변환하는 것은 의미 없지만, 원리를 이해하고 기억하는데 도움이 될 것이다.

 

'Java' 카테고리의 다른 글

Java 진법 4  (0) 2021.05.28
Java 진법 3  (0) 2021.05.27
Java 진법 1  (0) 2021.05.25
Java 상수 2  (0) 2021.05.15
Java 상수 1  (0) 2021.04.30