[Java] 기수 변환(e.g. 10진수 ↔ 2진수 변환)
파일과 미디어
date
Apr 23, 2023
slug
BinaryToDecimal
author
status
Public
tags
Java
Decimal
Binary
summary
기수 변환
type
Post
thumbnail
category
updatedAt
Apr 22, 2023 04:50 PM
알고리즘을 풀다보면 10진수를 n진수 또는 n진수를 10진수로 변환시키는 경우가 많다.
정수값을 임의의 기수로 변환하는 방법에 대해서 정리해보자.
1. 10 진수 정수 → n 진수 문자열
기본적인 방법
int n = 2; //2진수 예시
int num10 = 256; //10진수
String numStr = ""; //n진수 문자열
while(num10 > 0){
numStr = String.valueOf(num10%n) + numStr;
num10 /= n;
}
System.out.println(numStr); //2진수 100000000
16진수의 경우 [ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F ]로 이루어지기 때문에 기본적인 방법으로 계산시 711이 나오면 11은 B이므로 7B로 변환하여야 한다.
Java Integer 라이브러리 사용
int num = 156;
String num2Str = Integer.toString(num, 2); //2진수
String num3Str = Integer.toString(num, 3); //3진수
String num8Str = Integer.toString(num, 8); //8진수
String num16Str = Integer.toString(num, 16); //16진수
System.out.println(num2Str); //10011100
System.out.println(num3Str); //12210
System.out.println(num8Str); //234
System.out.println(num16Str); //9c
2. n(2, 3, 8) 진수 문자열 → 10진수 정수
기본적인 방법
String numStr = "1111011"; //2진수 문자열
int n = 2; //2진수
int len = numNStr.length();
String[] strArr = numNStr.split("");
int num10 = 0;
int multi = 1;
for(int i = len-1; i>=0; i--){
num10 += Integer.vlaueof(strArr[i]) * multi;
multi *= n;
}
System.out.println(num10); //123
Math.pow() 방법
String numNStr = "1111011"; //2진수 문자열
int n = 2; //2진수
int len = numNStr.length();
String[] strArr = numNStr.split("");
int num10 = 0;
int index = 0;
for(int i=len-1; i>=0; i--){
num10 += Integer.valueOf(strArr[i]) * (int)Math.pow(n, index);
index++;
}
System.out.println(num10); //123
Java Integer 라이브러리 사용
String num2Str = "1111011";
String num3Str = "11120";
String num8Str = "173";
String num16Str = "7b";
int num2 = Integer.parseInt(num2Str, 2); //2진수 문자열
int num3 = Integer.parseInt(num3Str, 3); //3진수 문자열
int num8 = Integer.parseInt(num8Str, 8); //8진수 문자열
int num16 = Integer.parseInt(num16Str, 16); //16진수 문자열
System.out.println(num2); //123
System.out.println(num3); //123
System.out.println(num8); //123
System.out.println(num16); //123