将二进制字符串转换为十进制数
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":
- i=0: n = 0*2 + (1-48) = 0 + 1 = 1
- i=1: n = 1*2 + (0-48) = 2 + 0 = 2
- i=2: n = 2*2 + (0-48) = 4 + 0 = 4
- i=3: n = 4*2 + (1-48) = 8 + 1 = 9
- 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 ✓

浙公网安备 33010602011771号