[C++] 진수 변환

yeolife ㅣ 2023. 7. 5. 14:34

정의

2진수, 8진수, 10진수, 16진수를 서로 변환하기

 

10진수를 2진수로 변환

정수로 저장

※ 10진수를 n진수로 변환하려면 2 대신에 n을 넣으면 된다

// 10진수를 2진수로 변환하기

int DtoB(int num) { // ex. num = 41
	int i = 1, ans = 0;

    while(num != 0) {
        // 한 자리씩 2의 나머지를 더함
        ans += (num % 2) * i; 

        i *= 10;
        num /= 2;
    }
    
    return ans;
}

 

문자열으로 저장

// 10진수를 문자열 2진수로 변환하기

#include <bitset>
#include <string>

string DtoB_str(int num, int i) { // ex. num = 41
	string ans;

    // i는 비트 자리수, num은 변환할 10진수
    ans = bitset<i>(num).to_string();
	
    return ans;
}

 

2진수를 10진수로 변환

정수로 저장

// 정수형 2진수를 10진수로 변환하기

int BtoD(int num) { // ex. num = 101001
    int i = 0, ans = 0;
    
    while(num != 0) {
        // 한 자리씩 2^i만큼 더함
        ans += (num % 10 << i);

        i++;
        num /= 10;
    }
    
    return num;
}

 

10진수를 8진수로 변환

출력에서 변환

void DtoOX(int num, int k) { // ex. num = 41
	if(k == 8)
    	cout << oct << num; // 8진수 출력
    else if(k == 16)
    	cout << hex << num; // 16진수 출력
    else if(k == 10)
		cout << dec << num; // 10진수 출력
}

 

문자열로 저장

void DtoOX(int num, int k) { // ex. num = 41
	char ans[100];
    
    if(k == 8)
    	sprintf(ans, "%o", num); // n을 8진수로 변환하여 저장
    else if(k == 16)
    	sprintf(ans, "%x", num); // n을 16진수로 변환하여 저장
    else if(k == 10)
    	sprintf(ans, "%d", num); // n을 10진수로 변환하여 저장
    
    int i = 0;
    while(ans[i] != '\0')
    	cout << ans[i++];
}