十六进制转十进制,怎样计算十六进制数。
1个回答
展开全部
十六进制转十进制:
从个位起第i位乘以16的i-1次方
比如
0x233 = 2*16^2 + 3*16^1 + 3*16^0 = 512 + 48 + 3 = 563
0x666 = 6*16^2 + 6*16^1 + 6*16^0 = 1536 + 96 + 6 = 1638
0x7FFF = 7*16^3+15*16^2+15*16^1+15*16^0=28672+3840+240+15=32767
十进制转十六进制:
除十六取余数
比如
233 ÷ 16 = 14 ......9
14 ÷ 16 = 0 ......14
倒着写就是0xE9
32768 ÷ 16 = 2048 ......0
2048 ÷ 16 = 128......0
128 ÷ 16 = 8......0
8 ÷ 16 = 0......8
倒着写就是0x8000
算法实现:
十六进制转十进制:
#include<stdio.h>
#include<string.h>
char buf[20];
int len,_pow,ans=0;
int trans(char hex)
{
if (hex>='0'&&hex<='9') return hex-48;
if (hex>='a'&&hex<='f') return hex-87;
if (hex>='A'&&hex<='F') return hex-55;
return 0;
}
int main(){
scanf("%s",buf);
len = strlen(buf);
_pow = 1;
for (int i=len-1;i>=0;i--)
{
ans = ans + trans(buf[i]) * _pow;
_pow = _pow << 4;
}
printf("%d\n",ans);
return 0;
}
十进制转十六进制:
#include<stdio.h>
char trans(int deci)
{
if (deci<10) return deci+48;
return deci+55;
}
int n,len=0;
char hex[20];
int main(){
scanf("%d",&n);
while(n)
{
hex[len++] = trans(n&15);
n=n>>4;
}
for (int i=len-1;i>=0;i--)
putchar(hex[i]);//跟手算一样,要倒着输出
return 0;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询