掌握C语言,必知常用进制转换技巧

作者:用户BWFS 更新时间:2025-07-28 23:05:56 阅读时间: 2分钟

在C语言编程中,进制转换是一个基础且常用的操作。掌握以下常用进制转换技巧,将有助于提高编程效率和解决问题的能力。

一、十进制转二进制

原理

十进制转二进制采用“除2取余法”,即不断地将十进制数除以2,记录下每次的余数,然后将余数倒序排列,即可得到对应的二进制数。

示例代码

#include <stdio.h>

void decToBin(int n) {
    if (n == 0) {
        printf("0");
        return;
    }
    int arr[32];
    int index = 0;
    while (n > 0) {
        arr[index++] = n % 2;
        n = n / 2;
    }
    for (int i = index - 1; i >= 0; i--) {
        printf("%d", arr[i]);
    }
}

int main() {
    int num;
    printf("Enter a decimal number: ");
    scanf("%d", &num);
    printf("Binary representation: ");
    decToBin(num);
    return 0;
}

二、二进制转十进制

原理

二进制转十进制采用“按位权展开法”,即把二进制数的每一位乘以其对应的2的幂次方,然后将结果相加。

示例代码

#include <stdio.h>

int binToDec(char binary[]) {
    int len = strlen(binary);
    int base = 1;
    int dec_value = 0;
    for (int i = len - 1; i >= 0; i--) {
        if (binary[i] == '1')
            dec_value += base;
        base = base * 2;
    }
    return dec_value;
}

int main() {
    char binary[32];
    printf("Enter a binary number: ");
    scanf("%s", binary);
    printf("Decimal representation: %d", binToDec(binary));
    return 0;
}

三、十进制转八进制

原理

十进制转八进制同样采用“除N取余法”,其中N为8。不断地将十进制数除以8,记录下每次的余数,然后将余数倒序排列,即可得到对应的八进制数。

示例代码

#include <stdio.h>

void decToOct(int n) {
    if (n == 0) {
        printf("0");
        return;
    }
    int arr[32];
    int index = 0;
    while (n > 0) {
        arr[index++] = n % 8;
        n = n / 8;
    }
    for (int i = index - 1; i >= 0; i--) {
        printf("%d", arr[i]);
    }
}

int main() {
    int num;
    printf("Enter a decimal number: ");
    scanf("%d", &num);
    printf("Octal representation: ");
    decToOct(num);
    return 0;
}

四、八进制转十进制

原理

八进制转十进制同样采用“按位权展开法”,即将八进制数的每一位乘以其对应的8的幂次方,然后将结果相加。

示例代码

#include <stdio.h>

int octToDec(char octal[]) {
    int len = strlen(octal);
    int base = 1;
    int dec_value = 0;
    for (int i = len - 1; i >= 0; i--) {
        if (octal[i] >= '0' && octal[i] <= '7')
            dec_value += (octal[i] - '0') * base;
        base = base * 8;
    }
    return dec_value;
}

int main() {
    char octal[32];
    printf("Enter an octal number: ");
    scanf("%s", octal);
    printf("Decimal representation: %d", octToDec(octal));
    return 0;
}

五、十进制转十六进制

原理

十进制转十六进制同样采用“除N取余法”,其中N为16。不断地将十进制数除以16,记录下每次的余数,然后将余数倒序排列。如果余数大于9,则用A、B、C、D、E、F表示。

示例代码

#include <stdio.h>

void decToHex(int n) {
    if (n == 0) {
        printf("0");
        return;
    }
    int arr[32];
    int index = 0;
    while (n > 0) {
        int remainder = n % 16;
        if (remainder < 10)
            arr[index++] = remainder;
        else
            arr[index++] = remainder - 10 + 'A';
        n = n / 16;
    }
    for (int i = index - 1; i >= 0; i--) {
        printf("%c", arr[i]);
    }
}

int main() {
    int num;
    printf("Enter a decimal number: ");
    scanf("%d", &num);
    printf("Hexadecimal representation: ");
    decToHex(num);
    return 0;
}

六、十六进制转十进制

原理

十六进制转十进制同样采用“按位权展开法”,即将十六进制数的每一位乘以其对应的16的幂次方,然后将结果相加。

示例代码

#include <stdio.h>

int hexToDec(char hex[]) {
    int len = strlen(hex);
    int base = 1;
    int dec_value = 0;
    for (int i = len - 1; i >= 0; i--) {
        if (hex[i] >= '0' && hex[i] <= '9')
            dec_value += (hex[i] - '0') * base;
        else if (hex[i] >= 'A' && hex[i] <= 'F')
            dec_value += (hex[i] - 'A' + 10) * base;
        base = base * 16;
    }
    return dec_value;
}

int main() {
    char hex[32];
    printf("Enter a hexadecimal number: ");
    scanf("%s", hex);
    printf("Decimal representation: %d", hexToDec(hex));
    return 0;
}

总结

掌握以上常用进制转换技巧,将有助于你在C语言编程中更好地处理进制转换问题。在实际编程过程中,可以根据需要选择合适的转换方法,以提高编程效率。

大家都在看
发布时间:2025-06-08 02:37
引言Oracle Linux是一款免费开源的操作系统,以其稳定性和安全性在服务器、云计算等领域得到广泛应用。对于开发者而言,掌握Oracle Linux不仅有助于提高工作效率,还能为日后的系统开发打下坚实的基础。本文将全面解析如何在Orac。
发布时间:2024-12-10 14:31
公交线路:地铁1号线 → 地铁2号线 → 城郊线,全程约47.6公里1、从二七广场乘坐内地铁1号线,经过2站容, 到达紫荆山站2、步行约30米,换乘地铁2号线3、乘坐地铁2号线,经过8站, 到达南四环站4、乘坐城郊线,经过14站, 到达新郑。
发布时间:2024-11-11 12:01
1、先前,@符号在英文中含有两种意思,即“在”或“单价”,它的前一种意思的发音类似于英文at,于是就往往被当作“在”的代名词来使用。“明天早晨在学校等你”的那张英文便条就成了“Waityou@School@morning”的模样。除了at。
发布时间:2024-12-09 19:46
从距离来说北京站最近,北京西站次之,北京南站略远。先说大巴,北京西,北京站,北京南都有直达大巴,大巴都是16元。一个多小时左右吧。然后说地铁,北京西可以地铁1号线到建国门换2号线到东直门北京南可以地铁4号线到宣武门换2号线到东直门北京站直。
发布时间:2024-10-31 05:40
学历学籍在线验证报告验证码是一串字母以及数字混合使用的16位代码,该代码是自2019年3月15日开始升级为16位的。可以通过登录进入到学信网然后点击在线验证报告就可以申请得到。。
发布时间:2024-11-11 12:01
目前主流的机器学习类型是深度学习,深度学习需要海量的数据做支撑,这些数据从哪里来,答案是数据标注行业。数据标注简单来说就是对图像、语音、文本、视频等数据进行拉框、描点等标注操作,以满足机器学习需要的过程。从事这项工作的职业就是数据标注员。
发布时间:2024-10-30 05:18
敏感性的肌肤都是很容易出现瘙痒或是红肿现象的,尤其是当皮肤干燥缺水的时候,各种不适现象更容易出现,总之必须要注意对自己的肌肤做好正确的保养措施,使用合适的护。
发布时间:2024-12-13 23:18
8月24日,国家启动沿江高铁通道规划方案研究。沿江高铁建成后,成都内最快3小时到武汉,7小时直容飙上海!沿江高铁简介:沪蓉沿江高速铁路,又名“沪汉蓉高速铁路”“沿江高铁”,主要由成渝客专、渝利铁路、宜万铁路、汉宜铁路、合武铁路、合宁铁路、沪。
发布时间:2024-12-12 02:14
颐和园北门,地铁4号线北宫门站。
发布时间:2024-11-25 11:16
方法/步骤1准备一张大红纸。我用的是对联纸,质地比较软。折叠成三角形,之前有分享过,在上面画上准备剪纸的图案,这样剪纸出来的就是团花。2在三角形下面最尖尖的角上面用剪刀剪出几个镂空。3因为这里很容易下剪,不用刀子就可以剪出花样来。4鱼的眼睛。