C语言进制转换(全)

C语言进制转换(全)

  • 转二进制:
    • 十进制转二进制(10➤2)
    • 十六进制转二进制(16➤2)
    • 八进制转二进制(8➤2)
  • 转十六进制
    • 二进制转十六进制(2➤16)
    • 八进制转十六进制(8➤16)
    • 十进制转十六进制(10➤16)
  • 转八进制
    • 二进制转八进制(2➤8)
    • 十进制转八进制(10➤8)
    • 十六进制转八进制(16➤8)
  • 转十进制
    • 二进制转十进制(2➤10)
    • 八进制转十进制(8➤10)
    • 十六进制转十进制(16➤10)

转二进制:

十进制转二进制(10➤2)

可以通过不断地对10取余数并向左移动二进制位来将十进制数转换为二进制数。具体步骤如下:

1.定义一个数组存放二进制数。
2.定义一个变量记录数组下标。
3.循环取10的余数,直到10为0为止。
4.每次取余数后将其存入数组中。
5.每次取余数后将数组下标加1。
6.最后将数组倒序输出。

代码如下

#include <stdio.h>

int main()
{
    int decimal, remainder, index = 0;
    int binary[32];
    
    printf("请输入一个十进制数:");
    scanf("%d", &decimal);
    
    while (decimal != 0)
    {
        remainder = decimal % 2;
        binary[index] = remainder;
        index++;
        decimal /= 2;
    }
    
    printf("转换为二进制数为:");
    for (int i = index - 1; i >= 0; i--)
    {
        printf("%d", binary[i]);
    }
    
    return 0;
}

十六进制转二进制(16➤2)

通过使用switch语句和十六进制数的位操作实现了16进制数到2进制数的转换。具体来说,程序遍历输入的16进制数的每一个字符,然后根据字符的值使用相应的case标签,在输出中添加对应的2进制数。

代码如下

#include <stdio.h>

int main() {
    char hex[17];
    int i = 0;

    // 读入16进制数
    printf("请输入16进制数:");
    scanf("%s", hex);

    printf("对应的2进制数为:");
    while (hex[i]) {
        switch (hex[i]) {
            case '0':
                printf("0000");
                break;
            case '1':
                printf("0001");
                break;
            case '2':
                printf("0010");
                break;
            case '3':
                printf("0011");
                break;
            case '4':
                printf("0100");
                break;
            case '5':
                printf("0101");
                break;
            case '6':
                printf("0110");
                break;
            case '7':
                printf("0111");
                break;
            case '8':
                printf("1000");
                break;
            case '9':
                printf("1001");
                break;
            case 'A':
            case 'a':
                printf("1010");
                break;
            case 'B':
            case 'b':
                printf("1011");
                break;
            case 'C':
            case 'c':
                printf("1100");
                break;
            case 'D':
            case 'd':
                printf("1101");
                break;
            case 'E':
            case 'e':
                printf("1110");
                break;
            case 'F':
            case 'f':
                printf("1111");
                break;
            default:
                printf("\n错误:无效的16进制数!\n");
                return 0;
        }
        i++;
    }

    return 0;
}

运行程序后,输入要转换的16进制数,程序会输出对应的2进制数。注意,程序中只能处理大写或小写字母的16进制数,若输入的字符串中含有其他字符,程序会提示无效的16进制数。

八进制转二进制(8➤2)

1.首先,要从用户获取一个八进制数。
2.在while循环中,我们模拟二进制的转换过程。
3.在每次迭代中,将八进制数的最后一位存储在 rem变量中。
4.然后将其转换为二进制并将其添加到 binary_num 变量中。
5.base 变量用于计算二进制数中的每个位数。
6.最后,打印出生成的二进制数。

代码如下

#include <stdio.h>

int main() {
    int octal_num, binary_num = 0, base = 1, rem;
    printf("Enter an octal number: ");
    scanf("%d", &octal_num);
    while (octal_num > 0) {
        rem = octal_num % 10;
        binary_num += rem * base;
        base *= 2;
        octal_num /= 10;
    }
    printf("Binary number: %d", binary_num);
    return 0;
}

转十六进制

二进制转十六进制(2➤16)

在C语言中,可以使用printf函数和格式化字符串控制符来实现二进制转十六进制的操作。

代码如下

#include <stdio.h>

int main()
{
    int binary = 10101110; // 二进制数
    int hex = 0; // 十六进制数
    int i = 0;
    
    while (binary != 0) {
        // 将每四位二进制数转换为一个十六进制数
        hex += (binary % 10) * (1 << i); 
        binary /= 10;
        i += 4;
    }
    
    printf("0x%x", hex); // 输出十六进制数
    
    return 0;
}

在上述代码中,10101110是一个8位二进制数,每四位二进制数对应一个十六进制数。在循环中,每次取出最低位的四位二进制数,通过移位运算计算出对应的十六进制数,然后累加到hex 变量中。最后,使用 %x 格式化字符串控制符输出十六进制数。输出结果为 0xae。

八进制转十六进制(8➤16)

C语言中转换八进制到十六进制可以使用sprintf()函数

代码如下

#include <stdio.h>

int main()
{
    int octal = 037;
    char hex[10];
    sprintf(hex, "%X", octal);

    printf("%o in octal is %s in hexadecimal.\n", octal, hex);

    return 0;
}

输出结果为:37 in octal is 1F in hexadecimal.

十进制转十六进制(10➤16)

可以用 sprintf 函数将十进制数转成十六进制字符串,再用 printf 函数输出。

#include <stdio.h>

int main()
{
    int dec = 336;
    char hex[10];
    sprintf(hex, "%X", dec); // 将十进制数转成十六进制字符串
    printf("%s\n", hex); // 输出十六进制数
    return 0;
}

注意:sprintf 函数的第一个参数是一个字符数组,而不是指针,因为它要在数组中存储转换后的字符串。在使用 sprintf函数时,应该确保目标字符数组足够大,以容纳转换后的字符串。在本例中,目标字符数组 hex 的大小为 10,足够存储任何 32位整数的十六进制表示。

转八进制

二进制转八进制(2➤8)

代码如下

#include <stdio.h>

int main() {
    long long binaryNumber;
    int octalNumber = 0, decimalNumber = 0, i = 0;

    printf("输入一个二进制数: ");
    scanf("%lld", &binaryNumber);

    // 将二进制转换为十进制
    while (binaryNumber != 0) {
        decimalNumber += (binaryNumber % 10) * pow(2, i);
        ++i;
        binaryNumber /= 10;
    }

    i = 1;

    // 将十进制转换为八进制
    while (decimalNumber != 0) {
        octalNumber += (decimalNumber % 8) * i;
        decimalNumber /= 8;
        i *= 10;
    }

    printf("转换为八进制数为: %d", octalNumber);

    return 0;
}

在此程序中,我们使用了两个while循环:一个用于将二进制数转换为十进制数,另一个用于将十进制数转换为八进制数。在第一个while循环中,我们通过计算每个位上的数字与2的幂的乘积来将二进制数转换为十进制数。在第二个while循环中,我们通过计算每个位上的数字与8的幂的乘积来将十进制数转换为八进制数。最后,我们使用printf函数来输出转换为八进制数的结果。

十进制转八进制(10➤8)

代码如下

#include <stdio.h>

void DecimalToOctal(int decimalNumber)
{
    int octalNumber = 0, i = 1;
  
    // 从十进制数开始迭代
    while (decimalNumber != 0)
    {
        octalNumber += (decimalNumber % 8) * i;
        decimalNumber /= 8;
        i *= 10;
    }
  
    printf("转换后的八进制数为: %d", octalNumber);
}

int main()
{
    int decimalNumber;
  
    printf("请输入一个十进制数: ");
    scanf("%d", &decimalNumber);
  
    DecimalToOctal(decimalNumber);
  
    return 0;
}

此程序将十进制数作为输入,使用while循环将其转换为八进制数,最后将其打印出来。可以通过scanf函数从控制台读取用户输入的十进制数。

十六进制转八进制(16➤8)

代码如下

#include <stdio.h>

int main()
{
    char hex_num[10], oct_num[10];
    int i, j, k, digit;
    long int dec_num = 0, octal_num = 0;

    printf("Enter a hexadecimal number: ");
    scanf("%s", hex_num);

    // Converting hexadecimal to decimal
    for(i = 0; hex_num[i] != '\0'; i++)
    {
        if(hex_num[i] >= '0' && hex_num[i] <= '9')
            digit = hex_num[i] - '0';
        else if(hex_num[i] >= 'A' && hex_num[i] <= 'F')
            digit = hex_num[i] - 'A' + 10;
        else if(hex_num[i] >= 'a' && hex_num[i] <= 'f')
            digit = hex_num[i] - 'a' + 10;

        dec_num = 16 * dec_num + digit;
    }

    // Converting decimal to octal
    for(j = 0; dec_num != 0; j++)
    {
        oct_num[j] = dec_num % 8 + '0';
        dec_num /= 8;
    }

    // Reversing the octal number
    for(k = j - 1; k >= 0; k--)
    {
        octal_num = 10 * octal_num + (oct_num[k] - '0');
    }

    printf("The octal equivalent of %s is %ld.\n", hex_num, octal_num);

    return 0;
}

该程序首先从用户接收一个十六进制数,将其转换为整数(十进制),然后将其转换为八进制数,并输出结果。程序中使用了一个循环来计算十六进制数的十进制值,并使用另一个循环来计算该十进制数的八进制值。最后,程序将八进制数反转并输出结果。

例如:

  • 周一至周五晚上 7 点—晚上9点
  • 周六上午 9 点-上午 11 点
  • 周日下午 3 点-下午 6 点

转十进制

二进制转十进制(2➤10)

C语言中可以使用 strtol() 函数将二进制字符串转换为十进制

long strtol(const char *nptr, char **endptr, int base);

其中,nptr 表示待转换的字符串,endptr 表示转换结束后的指针位置,base 表示被转换数字的进制数,一般为 2、8、10 或16。

代码如下

#include <stdio.h>
#include <stdlib.h>

int main()
{
    char binary[] = "10101";
    char *endptr;
    long decimal = strtol(binary, &endptr, 2);
    printf("Binary: %s, Decimal: %ld\n", binary, decimal);
    return 0;
}

八进制转十进制(8➤10)

  • octal变量存储输入的八进制数。
  • decimal变量存储转换后的十进制数,
  • i变量用于计算相应的次方数,pow()函数用于计算次方值。
  • 然后在while循环中,使用了每位数字乘以对应次方数的方法进行转换
  • 最后输出结果。

代码如下

#include <stdio.h>
#include <math.h>

int main() {
    int octal, decimal = 0, i = 0;

    printf("请输入一个八进制数:");
    scanf("%o", &octal);

    while (octal != 0) {
        decimal += (octal % 10) * pow(8, i);
        ++i;
        octal /= 10;
    }

    printf("八进制数 %o 转换为十进制数为 %d", octal, decimal);

    return 0;
}

十六进制转十进制(16➤10)

可以使用C语言中的strtol函数来将十六进制字符串转换为十进制数。

long int strtol(const char *str, char **endptr, int base);

其中,第一个参数str是需要转换的字符串;第二个参数endptr是一个指向字符指针的指针,用于存储转换后未处理的部分;第三个参数base是转换后的数值进制,一般使用16表示十六进制。
代码如下

#include <stdio.h>
#include <stdlib.h>

int main() {
    char hex[] = "1A"; // 十六进制字符串
    long int dec = strtol(hex, NULL, 16); // 转换为十进制数
    printf("%ld\n", dec); // 输出十进制数
    return 0;
}

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
扎眼的阳光的头像扎眼的阳光普通用户
上一篇 2023年12月12日
下一篇 2023年12月12日

相关推荐