C语言如何实现十六进制转换成十进制

谭浩强版本里面一个练习题,额,不会。。。。。... 谭浩强版本里面一个练习题,额,不会。。。。。 展开
 我来答
信息花舍
高粉答主

2020-04-01 · 关注我不会让你失望
知道小有建树答主
回答量:150
采纳率:96%
帮助的人:5.3万
展开全部

C语言实现十六进制转换成十进制如下:

例如将十六进制数字 9FA8C 转换成十进制

9FA8C = 9×164 + 15×163 + 10×162 + 8×161 + 12×160 = 653964(十进制)。

从右往左看,第1位的位权为 160=1,第2位的位权为 161=16,第3位的位权为 162=256,第4位的位权为 163=4096,第5位的位权为 164=65536 …… 第n位的位权就为 16n-1。

将各个位的数字乘以位权,然后再相加,就得到了十进制形式。

十六进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方。

所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。

再例如:十六进制:EA7 = 14×162 + 10×161 + 7×160 = 3751(十进制)。



扩展资料:

C语言10进制转16进制

把十进制的数不停除以16的余数按从右到左的顺序排起来就是16进制,例如:55/16=0余5例如100 100/16=6余4 6/16余6,所以就是64,再例如1000 1000/16=62余8 62/16=3余12 3/16余3所以结果是3C8 //。

对于整数部分,用被除数反复除以2,除第一次外,每次除以2均取前一次商的整数部分作被除数并依次记下每次的余数。另外,所得到的商的最后一位余数是所求二进制数的最高位。

对于小数部分,采用连续乘以基数2,并依次取出的整数部分,直至结果的小数部分为0为止。

参考资料来源:百度百科-十六进制至十进制转换-十六进制--->十进制




帐号已注销
高粉答主

2020-03-03 · 说的都是干货,快来关注
知道小有建树答主
回答量:263
采纳率:95%
帮助的人:10.6万
展开全部

可以用<stdlib.h> 中的char*_itoa(intvalue,char*string,intradix);把整型转换为其他进制的字符串参考代码:

int main(){int a=110;char p;_itoa(110,p,16); //16表示16进制,还可以用2、8、10printf("%s",p);return 0;}

GCC,GNU组织开发的开源免费的编译器,MinGW,Windows操作系统下的GCC,Clang,开源的BSD协议的基于LLVM的编译器。

扩展资料:

运算符号:

比较特别的是,比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补 0)位移。例如,将 11100011 右移 3 比特,算术右移后成为 11111100,逻辑右移则为 00011100。因算术比特右移较适于处理带负号整数,所以几乎所有的编译器都是算术比特右移。

运算符的优先级从高到低大致是:单目运算符、算术运算符、关系运算符、逻辑运算符、条件运算符、赋值运算符(=)和逗号运算符。

参考资料来源:百度百科-c语言




本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
彭珂的课堂
2020-11-20 · IT资讯、技能教学、学习经验分享。
彭珂的课堂
采纳数:98 获赞数:343

向TA提问 私信TA
展开全部

C语言_012_十六进制转十进制

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
开心红茶杯
2011-03-05 · TA获得超过2264个赞
知道小有建树答主
回答量:628
采纳率:0%
帮助的人:404万
展开全部
#include<stdlib.h>
#define initsize 20
#define increment 10
typedef char elemtype;
typedef struct stack{
elemtype *base;
elemtype *top;
int stacksize;
}stack;
void initstack(stack &s)//初始化栈
{s.base=(elemtype *)malloc(initsize*sizeof(elemtype));
if(!s.base)
exit(0);
s.stacksize=initsize;
s.top = s.base;}
void push(stack &s,elemtype e)//入栈,栈满则追加栈空间
{if(s.top-s.base>=initsize)
s.base=(elemtype *)realloc(s.base,(s.stacksize+increment)*sizeof(elemtype));
if(!s.base)
exit(0);
s.stacksize+=increment;
*s.top=e;
s.top++;
}
void pop(stack &s,elemtype &e)//出栈
{if(s.base==s.top)
printf("有错误");
else
e=*--s.top;
}
int empty(stack &s)//判栈空
{if(s.base==s.top)
return 1;
else return 0;
}
void clear(stack &s)
{if(s.base==s.top)
return ;
s.base=s.top;
}
void conversion(int n,int N)//进制转换
{int c;
char e;
stack s;
initstack(s);
while(n!=0)
{c=n%N;
n=n/N;
if(c<10)
*s.top++='0'+c;
else
{*s.top++='A'+c-10;
}
}
while(!empty(s))
{pop(s,e);
printf("%c",e);
}
clear(s);
}
void main()
{
int n,N;
printf("请输入十进制数:");
scanf("%d",&n);
printf("请输入需要转化进制:");
scanf("%d",&N);
printf("转化后的数是:");
conversion(n,N);
}
追问
c:\documents and settings\administrator\桌面\12.cpp(27) : error C2065: 'printf' : undeclared identifier
c:\documents and settings\administrator\桌面\12.cpp(65) : error C2065: 'scanf' : undeclared identifier
执行 cl.exe 时出错.

12.obj - 1 error(s), 0 warning(s)

。。。。。。这个咋回事啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
weizcw2008
推荐于2017-12-16 · TA获得超过446个赞
知道答主
回答量:27
采纳率:0%
帮助的人:40.6万
展开全部
一个十六进制数。存入数组ch

int i;
int n;
n = 0;
for (i = 0; ch[i] != '\0'; i++)
{
if (ch[i] >= '0' && ch[i] <= '9')
n = n * 16 + ch[i] - '0';
if (ch[i] >= 'a' && ch[i] <= 'f')
n = n * 16 + ch[i] - 'a' + 10;
if (ch[i] >= 'A' && ch[i] <= 'F')
n = n * 16 + ch[i] - 'A' + 10;
}

则,n就是转换后的。
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式