将二进制字符串转换为十进制数

C程序逐行解释

程序概述

这个程序的功能是将二进制字符串转换为十进制数。

逐行解释

头文件和预处理指令

#include   <stdio.h>
  • 包含标准输入输出库,提供printf等函数
#pragma warning (disable:4996)
  • 禁用编译器警告4996,通常用于禁用Microsoft Visual Studio中关于使用"不安全"函数的警告
#define    N   16
  • 定义宏常量N为16(在这个程序中实际未使用)

函数定义

int  fun( char s[])  
{  int  i,  n = 0;
  • 定义函数fun,参数是字符数组s,返回类型为int
  • 声明局部变量:i用作循环计数器,n初始化为0,用于存储转换结果
for (i=0; s[i]!='\0' ; ++i)
  • for循环遍历字符串,从索引0开始
  • 条件:s[i]!='\0' 检查是否到达字符串结束符
  • 每次循环后 ++i 递增索引
n = n*2 + (s[i] -48) ; 
  • 核心转换逻辑
    • n*2:将当前结果左移一位(相当于乘以2)
    • s[i] - 48:将字符转换为数字
      • ASCII码:'0' = 48, '1' = 49
      • 所以 '0' - 48 = 0, '1' - 48 = 1
    • 这实现了二进制到十进制的转换算法
return  n;
  • 返回转换后的十进制数

主函数

main( )
{  char  num[] = "10011";    int  n;
  • 主函数开始
  • 声明字符数组num并初始化为二进制字符串"10011"
  • 声明整型变量n
n = fun(num);
  • 调用fun函数,传入二进制字符串,结果存储在n
printf( "%s-->%d\n", num, n );
  • 输出结果,格式为:原二进制字符串 --> 转换后的十进制数

程序执行过程

对于输入"10011":

  1. i=0: n = 0*2 + (1-48) = 0 + 1 = 1
  2. i=1: n = 1*2 + (0-48) = 2 + 0 = 2
  3. i=2: n = 2*2 + (0-48) = 4 + 0 = 4
  4. i=3: n = 4*2 + (1-48) = 8 + 1 = 9
  5. i=4: n = 9*2 + (1-48) = 18 + 1 = 19

输出结果

10011-->19

验证

二进制10011转十进制: 1×2⁴ + 0×2³ + 0×2² + 1×2¹ + 1×2⁰ = 16 + 0 + 0 + 2 + 1 = 19 ✓

posted @ 2025-08-31 20:52  量子我梦  阅读(21)  评论(0)    收藏  举报