c语言十六进制转化为十进制代码,有人能帮忙讲解一下这段程序的算法吗? - 爱问答

(爱问答)

c语言十六进制转化为十进制代码,有人能帮忙讲解一下这段程序的算法吗?

#include<stdio.h>

#include<string.h>

main()

{

    int i=0,n=0;

    char a[10];

    unsigned long sum=0;

    scanf("%s",a);

    n=strlen(a);

    for (i=0;i<n;i++)

    {

      if (a[i]>='0'&&a[i]<='9')

      {

         sum=sum*16;

         sum=sum+a[i]-'0';

      }

      if (a[i]>='A'&&a[i]<='F')

      {

          sum=sum*16;

          sum=sum+a[i]-'A'+10;

      }

    }

    printf("%u",sum);

    return 0;

}


以1EH化为十进制数为例来说明
①十六化十,方法:按权相加
1EH=1×16^1+14×16^0
  =1×16+14×1
  =16+14
  =30
②程序中十进制数是作为字符串输入并处理的。
char a[10];
unsigned long sum=0;//sum为无符号长整型
scanf("%s",a);//十六进制数作为字符串输入
n=strlen(a);//n为此字符串长度
③for循环是从首位起逐位按权相加
如果是0~9直接进行按权相加。i=0,处理首位是a[0]=1,符合条件a[i]>='0'&&a[i]<='9',则进行if分支1:
sum=sum*16;   // sum=0*16=0
sum=sum+a[i]-'0'; // sum=0+a[0]-'0'=1
如果是A~F,要将其转化为对应的十进制数码进行按权相加。i=1,次位a[0]=E,符合条件a[i]>='A'&&a[i]<='F',则进行:
sum=sum*16;        // sum=1*16=16
sum=sum+a[i]-'A'+10; // sum=16+a[1]-'A'+10=16+14 =30
④处理后,打印输出(数过大时%u可避免用%d引起的溢出)
printf("%u ",sum);

c语言十六进制转化为十进制代码,有人能帮忙讲解一下这段程序的算法吗?


相关标签:c语言

下一篇:如何学会制作一个透明的CCTV?

上一篇:错误:读入的(八进制)字符不正确:0

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?