C语言进制转换(全)

03-18 1325阅读

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取余数并向左移动二进制位来将十进制数转换为二进制数。具体步骤如下:

            C语言进制转换(全)
            (图片来源网络,侵删)

            1.定义一个数组存放二进制数。

            2.定义一个变量记录数组下标。

            3.循环取10的余数,直到10为0为止。

            4.每次取余数后将其存入数组中。

            5.每次取余数后将数组下标加1。

            6.最后将数组倒序输出。

            代码如下

            #include 
            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 
            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 
            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 
            int main()
            {
                int binary = 10101110; // 二进制数
                int hex = 0; // 十六进制数
                int i = 0;
                
                while (binary != 0) {
                    // 将每四位二进制数转换为一个十六进制数
                    hex += (binary % 10) * (1 
                int octal = 037;
                char hex[10];
                sprintf(hex, "%X", octal);
                printf("%o in octal is %s in hexadecimal.\n", octal, hex);
                return 0;
            }
            
                int dec = 336;
                char hex[10];
                sprintf(hex, "%X", dec); // 将十进制数转成十六进制字符串
                printf("%s\n", hex); // 输出十六进制数
                return 0;
            }
            
                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;
            }
            
                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;
            }
            
                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] = 'A' && hex_num[i] = 'a' && hex_num[i] 
                    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 
              #include 
              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 
                #include 
                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 
                #include 
                int main() {
                    char hex[] = "1A"; // 十六进制字符串
                    long int dec = strtol(hex, NULL, 16); // 转换为十进制数
                    printf("%ld\n", dec); // 输出十进制数
                    return 0;
                }
                
VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]