| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1537 人关注过本帖
标题:关于十六进制转化为十进制的问题
只看楼主 加入收藏
不同认为
Rank: 1
等 级:新手上路
帖 子:93
专家分:3
注 册:2015-11-25
结帖率:57.14%
收藏
已结贴  问题点数:20 回复次数:7 
关于十六进制转化为十进制的问题
#include <stdio.h>
#include<string.h>
int main()
{
   int i,j,k,n=1,s=0;
   char  a[500];
   gets(a);
   k=strlen(a);
   if(n==0)
       printf("0\n");
   else
   {
   for(i=k-1;i>=0;i--)
   {   
       if(a[i]>='A')
           a[i]=a[i]-'A'+10;
       else
       if('0'<=a[i]&&a[i]<='9')
           a[i]=a[i]-'0';
       s=s+a[i]*n;
       n=n*16;
   }
   printf("%I64d\n",s);
   }
   return 0;
}
 输入 FE65CDBA 得出4268084666    但是把 printf("%I64d\n",s);  改成printf("%d\n",s)输出的是一个负数  这是为什么
2016-01-25 00:09
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:5 
望文生义  I64d 和d 能一样吗

一个是输出 LONG LONG  一个是输出int

DO IT YOURSELF !
2016-01-25 09:48
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
輸出負數的原因是滿字節頂頭的bit是1

授人以渔,不授人以鱼。
2016-01-25 16:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
FE65CDBA,每2個十六進制位爲一個Byte,這是一個4字節的整數,恰好是32位整數,最前面的F,即最高位的値是1,這對32位有符號整數系統來説,被解釋爲負數。但若擴展到64位整數系統,則在左邊還有32個0,此時對有符號整数來説不是負數。

注意:對負數,以滿字節閱讀,從最左邊開始,一直到真實的數値位置,全是1,不僅僅是頂頭那個bit是1而已。32位整數-1的二進制形式是32個1,即FFFFFFFF。之前有人説,EOF(-1)能被unsigned char接受,那接收出來的解釋是FF,即十進制的255,不是-1。

授人以渔,不授人以鱼。
2016-01-25 17:12
不同认为
Rank: 1
等 级:新手上路
帖 子:93
专家分:3
注 册:2015-11-25
收藏
得分:0 
回复 4楼 TonyDeng
还有一个问题是  我前面的s定义为int  没有定义为_int64 我用l64d的时候怎么不会报错
2016-01-25 18:54
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
以下是引用不同认为在2016-1-25 18:54:59的发言:

还有一个问题是  我前面的s定义为int  没有定义为_int64 我用l64d的时候怎么不会报错

首先,這是向上提升,低類型向高類型升級,不會裁剪數據,所以不會有問題。其次,不是所有編譯器都會報此類信息,scanf()/printf()是庫函數,傳統寫這類函數的代碼都不檢查類型匹配,但現在某些編譯器附加功能會在編譯時檢查此類問題,但不是所有編譯器都這樣,不檢查是符合標準的。

授人以渔,不授人以鱼。
2016-01-25 19:00
不同认为
Rank: 1
等 级:新手上路
帖 子:93
专家分:3
注 册:2015-11-25
收藏
得分:0 
回复 6楼 TonyDeng
明白了 谢谢
2016-01-26 00:07
beyondyf
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:103
帖 子:3282
专家分:12654
注 册:2008-1-21
收藏
得分:5 
确定明白了?那你分析一下下面的结果
unsigned char a = -1;
char b = -1;
int c;
c = a; //此时c是多少?
c = b; //此时c又是多少?

重剑无锋,大巧不工
2016-01-26 10:59
快速回复:关于十六进制转化为十进制的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.018173 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved