C 程序 二进制转换为十进制

  • Post category:C

下面就是C程序中二进制转十进制的完整攻略。

一、前置知识

在开始之前,你需要对一些基础概念有所了解:

  • 二进制:由0、1组成的数码系统,又称“基数为2的数学体系”。
  • 十进制:由0-9组成的数码系统,又称“基数为10的数学体系”。
  • 位权:二进制每一位所代表的权值,通常为2的n次幂(n为该位从右往左的位数)。
  • 二进制转十进制公式:以二进制数1011为例,其十进制表示为1×2³+0×2²+1×2¹+1×2⁰=11。

二、代码实现

下面是一个简单的C语言程序,可以将二进制数转换为十进制数。

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

int main()
{
    int bnum, dnum = 0, r, n = 0;

    printf("Enter a binary number: ");
    scanf("%d", &bnum);

    while (bnum != 0)
    {
        r = bnum % 10;
        dnum += r * pow(2, n);
        n++;
        bnum /= 10;
    }

    printf("Decimal Equivalent: %d", dnum);

    return 0;
}

代码实现中,涉及到的变量和逻辑如下:

  • bnum:输入的二进制数
  • dnum:转换为十进制后的数值
  • r:临时存储二进制数中每一位的变量
  • n:用于计算每一位大小的指数
  • pow():C语言中的内置函数,用于计算x的y次方

在上述代码中,用户需要输入一个二进制数,程序通过while循环将其转换为十进制数并输出。

例如,输入二进制数“1011”,程序将输出“Decimal Equivalent: 11”。

三、示例说明

下面给出两个示例讲解使用攻略:

示例1

用户输入的二进制数“1001”。

程序将执行如下操作:

  1. bnum为1001
  2. 第一次循环:r为1,dnum为0,n为0,dnum += r * pow(2, n)即0+1×2^0=1,n加1,bnum变为100
  3. 第二次循环:r为0,dnum为1,n为1,dnum += r * pow(2, n)即1+0×2^1=1,n加1,bnum变为10
  4. 第三次循环:r为0,dnum为1,n为2,dnum += r * pow(2, n)即1+0×2^2=1,n加1,bnum变为1
  5. 第四次循环:r为1,dnum为1,n为3,dnum += r * pow(2, n)即1+1×2^3=9,n加1,bnum变为0
  6. 循环结束,输出dnum为9,即输入的二进制数1001对应的十进制数为9。

示例2

用户输入的二进制数“11001101”。

程序将执行如下操作:

  1. bnum为11001101
  2. 第一次循环:r为1,dnum为0,n为0,dnum += r * pow(2, n)即0+1×2^0=1,n加1,bnum变为1100110
  3. 第二次循环:r为0,dnum为1,n为1,dnum += r * pow(2, n)即1+0×2^1=1,n加1,bnum变为110011
  4. 第三次循环:r为1,dnum为1,n为2,dnum += r * pow(2, n)即1+1×2^2=5,n加1,bnum变为11001
  5. 第四次循环:r为0,dnum为5,n为3,dnum += r * pow(2, n)即5+0×2^3=5,n加1,bnum变为1100
  6. 第五次循环:r为0,dnum为5,n为4,dnum += r * pow(2, n)即5+0×2^4=5,n加1,bnum变为110
  7. 第六次循环:r为1,dnum为5,n为5,dnum += r * pow(2, n)即5+1×2^5=37,n加1,bnum变为11
  8. 第七次循环:r为1,dnum为37,n为6,dnum += r * pow(2, n)即37+1×2^6=101,n加1,bnum变为1
  9. 第八次循环:r为1,dnum为101,n为7,dnum += r * pow(2, n)即101+1×2^7=205,n加1,bnum变为0
  10. 循环结束,输出dnum为205,即输入的二进制数11001101对应的十进制数为205。

通过以上两个示例,可以看到程序可以适用于不同长度的二进制数,并且可以正确地将其转换为对应的十进制数。