溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

C語(yǔ)言如何實(shí)現(xiàn)常見(jiàn)進(jìn)制轉(zhuǎn)換

發(fā)布時(shí)間:2023-04-07 10:30:44 來(lái)源:億速云 閱讀:151 作者:iii 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要介紹“C語(yǔ)言如何實(shí)現(xiàn)常見(jiàn)進(jìn)制轉(zhuǎn)換”,在日常操作中,相信很多人在C語(yǔ)言如何實(shí)現(xiàn)常見(jiàn)進(jìn)制轉(zhuǎn)換問(wèn)題上存在疑惑,小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”C語(yǔ)言如何實(shí)現(xiàn)常見(jiàn)進(jìn)制轉(zhuǎn)換”的疑惑有所幫助!接下來(lái),請(qǐng)跟著小編一起來(lái)學(xué)習(xí)吧!

一、十進(jìn)制數(shù)轉(zhuǎn)換為二進(jìn)制數(shù)、八進(jìn)制數(shù)

方法:舉例將十進(jìn)制數(shù)100轉(zhuǎn)換為二進(jìn)制數(shù),就是將100與2相除,得到商以及余數(shù),再將商與2不斷相除,最終除到商為0。按順序記錄下余數(shù),再將余數(shù)逆序輸出,即為二進(jìn)制的結(jié)果。八進(jìn)制同理,商不斷與8相除,最終除到商為0,按順序記錄下余數(shù),再將余數(shù)逆序輸出,即八進(jìn)制的結(jié)果。此方法同樣可以推廣到要轉(zhuǎn)換成二到九的任何一種進(jìn)制。

圖形如下:

C語(yǔ)言如何實(shí)現(xiàn)常見(jiàn)進(jìn)制轉(zhuǎn)換

代碼如下:

#include <stdio.h>
int main()
{
    int x, n;
    scanf("%d %d", &x, &n);//x是要轉(zhuǎn)換的十進(jìn)制數(shù),n為要轉(zhuǎn)換成的進(jìn)制
    int arr[100] = { 0 };//創(chuàng)建一個(gè)足夠大的數(shù)組來(lái)存放余數(shù)
    int i = 0,j = 0;
    while (x)
    {
        arr[i++] = x % n;//存放余數(shù),i最后的值正好是余數(shù)的個(gè)數(shù)
        x /= n;
    }
    for (j = i - 1; j >= 0; j--)
    {
        printf("%d", arr[j]);//余數(shù)倒序輸出
    }
    printf("\n");
    return 0;
}

二、十進(jìn)制轉(zhuǎn)換為十六進(jìn)制

將十進(jìn)制轉(zhuǎn)換為十六進(jìn)制同樣需要用到將商不斷除16以及逆序輸出等方法,但由于十六進(jìn)制中會(huì)出現(xiàn)A\B\C\D\E\F等字符,所以還需要將取得的余數(shù)做進(jìn)一步轉(zhuǎn)換。代碼如下:

#include <stdio.h>
int main()
{
    int x;
    scanf("%d", &x);
    char arr[100] = { 0 };//因?yàn)槭M(jìn)制中會(huì)出現(xiàn)A\B\C\D\E\F等字符,所以保存余數(shù)的數(shù)組類型應(yīng)定義為char
    int i = 0, j = 0;
    while (x)
    {
        arr[i++] = x % 16;
        x /= 16;
    }
    for (j = 0; j < i; j++)
    {
        //將取出的余數(shù)轉(zhuǎn)換為對(duì)應(yīng)的字符
        switch (arr[j])
        {
        case 10:arr[j] = 'A'; break;
        case 11:arr[j] = 'B'; break;
        case 12:arr[j] = 'C'; break;
        case 13:arr[j] = 'D'; break;
        case 14:arr[j] = 'E'; break;
        case 15:arr[j] = 'F'; break;
        default:arr[j] += 48;
        }
    }
    for (j = i - 1; j >= 0; j--)
    {
        printf("%c", arr[j]);//逆序打印
    }
    printf("\n");
    return 0;
}

三、二進(jìn)制數(shù)、八進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)

方法:需要將輸入的數(shù)的每一位取出,再與這個(gè)位上的權(quán)重相乘,最后相加得到結(jié)果。

代碼如下:

#include <stdio.h>
#include <math.h>
int main()
{
    int n = 0, sum = 0, i = 0, x = 0;
    scanf("%d %d", &x, &n);//x為輸入的二進(jìn)制或八進(jìn)制的數(shù),n為進(jìn)制。
    while (x)
    {
        sum += (x%10)*pow(n, i++);//x%10將x的每一位取出,再與這個(gè)位上的權(quán)重相乘。
        x /= 10;
    }
    printf("%d\n", sum);
    return 0;
}

四、十六進(jìn)制數(shù)轉(zhuǎn)換為十進(jìn)制數(shù)

十六進(jìn)制中含A\B\C\D\E\F等字符,所以在輸入的時(shí)候可以將其看成輸入一個(gè)字符串,需要先將每位上的字符轉(zhuǎn)換為對(duì)應(yīng)的數(shù)字與本位上的權(quán)重相乘,再相加得到最后的值。

代碼如下:

#include <stdio.h>
#include <string.h>
#include <math.h>
int main()
{
    char arr1[100] = { 0 };
    scanf("%s", arr1);
    int len = strlen(arr1);
    int i = 0,  sum = 0;
    for (i = 0; i<len; i++)
    {
        int temp = 0;
        switch (arr1[i])
        {
        case 'A':temp = 10; break;
        case 'B':temp = 11; break;
        case 'C':temp = 12; break;
        case 'D':temp = 13; break;
        case 'E':temp = 14; break;
        case 'F':temp = 15; break;
        default:temp = arr1[i] - '0'; break;
        //將各個(gè)位上的字符轉(zhuǎn)換為對(duì)應(yīng)的數(shù)字
        }
        sum += temp * pow(16, len-i-1);//各個(gè)位上的權(quán)重相乘再相加
    }
    printf("%d\n", sum);
    return 0;
}

到此,關(guān)于“C語(yǔ)言如何實(shí)現(xiàn)常見(jiàn)進(jìn)制轉(zhuǎn)換”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)?lái)更多實(shí)用的文章!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI