数字系统之间的转换

CCBeginner
立即练习

💡 本教程由 AI 辅助翻译自英文原版。如需查看原文,您可以 切换至英文原版

简介

数字系统是使用不同的符号和数学运算来表示数字的方式。在不同的数字系统之间进行转换是编程中的常见任务。在本实验中,我们将展示可以将数字从一个系统转换为另一个系统的程序。我们将涵盖以下内容:

  • 二进制到十进制的转换
  • 八进制到十进制的转换
  • 十进制到二进制的转换(不使用递归)
  • 十进制到二进制的转换(使用递归)

注意:你需要自己创建文件 ~/project/main.c 来练习编码,并学习如何使用 gcc 编译和运行它。

cd ~/project
## 创建 main.c
touch main.c
## 编译 main.c
gcc main.c -o main
## 运行 main
./main

Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL c(("C")) -.-> c/ControlFlowGroup(["Control Flow"]) c(("C")) -.-> c/FunctionsGroup(["Functions"]) c(("C")) -.-> c/UserInteractionGroup(["User Interaction"]) c/ControlFlowGroup -.-> c/if_else("If...Else") c/ControlFlowGroup -.-> c/for_loop("For Loop") c/ControlFlowGroup -.-> c/while_loop("While Loop") c/FunctionsGroup -.-> c/function_declaration("Function Declaration") c/FunctionsGroup -.-> c/function_parameters("Function Parameters") c/FunctionsGroup -.-> c/math_functions("Math Functions") c/FunctionsGroup -.-> c/recursion("Recursion") c/UserInteractionGroup -.-> c/user_input("User Input") c/UserInteractionGroup -.-> c/output("Output") subgraph Lab Skills c/if_else -.-> lab-123228{{"数字系统之间的转换"}} c/for_loop -.-> lab-123228{{"数字系统之间的转换"}} c/while_loop -.-> lab-123228{{"数字系统之间的转换"}} c/function_declaration -.-> lab-123228{{"数字系统之间的转换"}} c/function_parameters -.-> lab-123228{{"数字系统之间的转换"}} c/math_functions -.-> lab-123228{{"数字系统之间的转换"}} c/recursion -.-> lab-123228{{"数字系统之间的转换"}} c/user_input -.-> lab-123228{{"数字系统之间的转换"}} c/output -.-> lab-123228{{"数字系统之间的转换"}} end

二进制到十进制的转换

二进制是一种仅使用两个数字(0 和 1)的数字系统。十进制是一种使用十个数字(0 到 9)的数字系统。以下是将二进制数转换为其十进制等效值的 C 语言程序:

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

// 函数原型声明
int binary_decimal(int n);

int main()
{
    printf("\n\n\t\tLabEx - 学习的最佳场所\n\n\n");
    int n;
    char c;
    printf("请输入二进制数:");
    scanf("%d", &n);
    printf("\n\n\n%d 的十进制等效值为  %d\n\n", n, binary_decimal(n)); // 函数调用
    printf("\n\n\t\t\t编程很有趣!\n\n\n");
    return 0;
}

// 定义将二进制转换为十进制的函数
int binary_decimal(int n)
{
    int decimal = 0, i = 0, rem;
    while(n != 0)
    {
        rem = n%10;   // 获取个位数字
        n = n/10; // 获取除去个位数字后的数
        /*
            pow 是一个系统定义的函数,它接受
            两个整数作为输入参数
        */
        decimal += rem*pow(2, i++);
    }
    /*
        将输入二进制数的十进制等效值
        返回给函数调用
    */
    return decimal;
}

八进制到十进制的转换

八进制是一种使用八个数字(0 到 7)的数字系统。以下是将八进制数转换为其十进制等效值的 C 语言程序:

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

int main()
{
    printf("\n\n\t\tLabEx - 学习的最佳场所\n\n\n");
    long int octal, val, decimal = 0;
    int i = 0;
    printf("请输入一个八进制数:");
    scanf("%ld", &val);
    octal = val;
    while(octal != 0)
    {
        /*
            i++ 是后置递增,即先赋值再递增
        */
      decimal += (octal % 10)*pow(8, i++);
      octal/=10;    // 等同于 octal=octal/10
    }
    printf("\n\n\n%ld 的等效十进制值为 %ld\n\n\n", val, decimal);
    printf("\n\n\t\t\t编程很有趣!\n\n\n");
    return 0;
}

十进制到二进制的转换(非递归)

以下是将十进制数转换为其二进制等效值的 C 语言程序(不使用递归):

#include<stdio.h>

int main()
{
    printf("\n\n\t\tLabEx - 学习的最佳场所\n\n\n");
    int n,c,k;
    printf("请输入一个十进制整数:");
    scanf("%d", &n);

    // 以 31 位格式输出
    printf("\n\n\n十进制值 %d 的二进制等效值为:", n);

    for(c = 31; c >= 0; c--)
    {
        k = n>>c;
        /*
            num&1 = 如果 num 的最后一位是 1,则返回 true
            否则返回 false
        */
        if(k&1)
            printf("1");
        else
            printf("0");
    }
    printf("\n");
    printf("\n\n\t\t\t编程很有趣!\n\n\n");
    return 0;
}

十进制到二进制的转换(递归)

以下是将十进制数转换为其二进制等效值的 C 语言程序(使用递归):

#include<stdio.h>

// 函数原型声明
void decimal_binary(int );
void F(int );
void reverse(int );

int main()
{
    printf("\n\n\t\tLabEx - 学习的最佳场所\n\n\n");
    int n;
    printf("\n\n请输入一个十进制整数:");
    scanf("%d", &n);

    // 以 31 位格式输出
    printf("\n\n十进制值 %d 使用 decimal_binary 方法的二进制等效值为:", n);

    decimal_binary(n);  // 函数调用

    printf("\n\n十进制值 %d 使用 F() 方法的二进制等效值为:", n);
    F(n);   // 函数调用
    printf("\n\n值 %d 的二进制表示的反转为:", n);
    reverse(n); // 函数调用
    printf("\n\n\t\t\t编程很有趣!\n\n\n");
    return 0;
}

// 函数定义
void decimal_binary(int i)
{
    if(i <= 1)
    printf("%d", i);   // 以从上到下的格式打印
    else
    {
        decimal_binary(i/2);
        printf("%d", i%2);
    }
}

void F(int j)
{
    if(j/2)
    {
        F(j/2);
    }
    printf("%d", j%2);
}

void reverse(int k)
{
    if(k <= 1)
        printf("%d", k);
    else
    {
        printf("%d", k%2);
        F(k/2);
    }
    printf("\n\n");
}

总结

在本实验中,我们展示了可以在不同数字系统之间转换数字的程序。我们涵盖了二进制到十进制的转换、八进制到十进制的转换以及十进制到二进制的转换(使用和不使用递归)。我们希望本实验能帮助你理解如何在 C 语言编程中实现不同数字系统之间的转换。