Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++에서 10진수를 16진수로 변환하는 프로그램

10진수가 입력으로 주어졌을 때, 이를 16진수로 변환하는 것이 목표입니다. 이 글에서는 변환 원리와 단계별 알고리즘, 그리고 실제 동작하는 C++ 코드까지 차근차근 살펴보겠습니다.

10진수와 16진수의 기본 개념

컴퓨터에서 16진수는 밑수(base) 16으로 표현되며, 10진수는 밑수 10으로 표현됩니다. 10진수는 0부터 9까지의 숫자만 사용하는 반면, 16진수는 0부터 15까지의 값을 사용합니다. 이때 10은 A, 11은 B, 12는 C, 13은 D, 14는 E, 15는 F라는 문자로 표기합니다.

10진수를 16진수로 변환하는 단계

  • 주어진 수를 변환하려는 진법의 밑수로 나눕니다. 예를 들어 6789를 16진수로 변환해야 하므로 6789를 16으로 나눈 뒤 몫을 저장합니다. 나머지가 0~9 사이면 그대로 저장하고, 10~15 사이면 A~F 문자 형태로 변환하여 저장합니다.
  • 얻은 몫을 다시 16으로 나누고 각 자릿값을 계속 저장합니다.
  • 저장된 값들을 역순으로 정렬(오른쪽 시프트 개념)합니다.
  • 더 이상 나눌 수 없는 나머지만 남을 때까지 위 과정을 반복합니다.

아래는 10진수를 16진수로 변환하는 과정을 도식화한 것입니다.

C++에서 10진수를 16진수로 변환하는 프로그램

변환 예시

입력: 6789
    6789를 16으로 나눔 : 6789 / 16 = 5(나머지), 424(몫)
    몫을 다시 16으로 나눔 : 424 / 16 = 8(나머지), 26(몫)
    몫을 다시 16으로 나눔 : 26 / 16 = 10(나머지), 1(몫)
    이제 얻은 나머지들을 역순으로 배열하면 최종 16진수 값이 됩니다.
출력: 1A85

알고리즘

시작
Step 1-> 10진수를 16진수로 변환하는 함수 선언
    void convert(int num)
        char arr[100] 선언
        int i = 0 설정
        While(num != 0) 반복
            int temp = 0 설정
            temp = num % 16
            IF temp < 10
                arr[i] = temp + 48
                i 증가
            End
            Else
                arr[i] = temp + 55
                i 증가
            End
            num = num / 16
        End
        For(int j = i-1; j >= 0; j--) 반복
            arr[j] 출력
Step 2-> main() 함수
    int num = 6789 설정
    convert(num) 호출
종료

C++ 구현 코드

#include<iostream>
using namespace std;
// 10진수를 16진수로 변환하는 함수
void convert(int num) {
    char arr[100];
    int i = 0;
    while(num != 0) {
        int temp = 0;
        temp = num % 16;
        if(temp < 10) {
            // 숫자 0~9는 아스키 코드 48('0')을 더해 문자로 변환
            arr[i] = temp + 48;
            i++;
        } else {
            // 10~15는 아스키 코드 55를 더해 'A'~'F'로 변환
            arr[i] = temp + 55;
            i++;
        }
        num = num / 16;
    }
    // 역순으로 저장된 값을 거꾸로 출력
    for(int j = i-1; j >= 0; j--)
    cout << arr[j];
}
int main() {
    int num = 6789;
    cout << num << " converted to hexadecimal: ";
    convert(num);
    return 0;
}

코드 핵심 포인트

위 코드에서 +48+55는 아스키(ASCII) 코드를 활용한 부분입니다. 숫자 0의 아스키 코드가 48이므로 나머지가 0~9일 때 48을 더하면 해당 숫자 문자가 되고, 대문자 A의 아스키 코드가 65이므로 나머지가 10일 때 55를 더하면 'A'가 됩니다. 또한 나머지는 낮은 자릿수부터 역순으로 저장되기 때문에 마지막에 배열을 거꾸로 출력해야 올바른 16진수 값을 얻을 수 있습니다.

실행 결과

위 코드를 실행하면 다음과 같은 출력이 생성됩니다.

6789 converted to hexadecimal: 1A85