十六进制转换成十进制的具体算法?

具体怎么算?我老是算错啊,详细一点,多举几个例子,还有如果正好有被十六整除的结果余数就是0,接下来怎么办?别复制,要原创!谢谢!

十六进制转换成十进制的具体算法是:

1、首先明白16进制数(从右到左数是第0位,第1位,第2位……)的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方,依次这样排列下去。

2、明白ABCDEF表示的二进制数字分别是10,11,12,13,14,15。

3、十六进制转换成十进制的公式是:要从右到左用二进制的每个数去乘以16的相应次方,然后这些数字相加就是了。

在进行进制转换时有一基本原则:

转换后表达的“量”的多少不能发生改变。二进制中的111个苹果和十进制中的7个苹果是一样多的。

十进制中的数位排列是这样的…… 万 千 百 十 个 十分 百分 千分……

R进制中的数位排列是这样的……R^4 R^3R^2 R^1 R^0 R^-1 R^-2 R^-3……

可以看出相邻的数位间相差进制的一次方。

温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2019-09-06

十六进制转换成十进制的具体算法是:

1、首先明白16进制数(从右到左数是第0位,第1位,第2位……)的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方,依次这样排列下去。

2、明白ABCDEF表示的二进制数字分别是10,11,12,13,14,15。

3、十六进制转换成十进制的公式是:要从右到左用二进制的每个数去乘以16的相应次方,然后这些数字相加就是了。

例1:2AF5换算成10进制:

第0位: 5 * 16^0 = 5

第1位: F * 16^1 =15*16^1= 240

第2位: A * 16^2= 10* 16^2=2560

第3位: 2 * 16^3 = 8192

结果就是:5 * 16^0 + 15 * 16^1 + 10 * 16^2 + 2 * 16^3 = 10997

例2:CE换算成10进制:

第0位:E*16^0=14*16^0=14

第1位:C*16^1=12*16^1=192

结果就是:14*16^0+12*16^1=206

拓展资料

16进制即逢16进1,每一位上可以是从小到大为0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F共16个大小不同的数。16进制转换即16进制与其他不同进制之间的换算转换。

本回答被网友采纳
第2个回答  推荐于2019-09-19

(一)十六进制化为十进制方法:
用个位数+十位数*16+百位数*256+千位数*4096+...相乘的时候,前面的一位数乘以的数是十后面一位数乘以数的16倍.

具体案例如下:

    (AB)=A×16+B=(171)

    (ABC)=A×256+B×16+C=(2748)

(二)十进制化为十六进制的方法

把十进制转十六进制按照除16取余,直到商为0为止。(具体用法如下图)

本回答被网友采纳
第3个回答  推荐于2017-08-20

十六进制转十进制:

从个位起第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;
}

本回答被网友采纳
第4个回答  推荐于2019-09-25
16进制到十进制的转换方法:
16进制数的第0位的权值为16的0次方,第1位的权值为16的1次方,第2位的权值为16的2次方……
所以,在第N(N从0开始)位上,如果是是数 X (X 大于等于0,并且X小于等于 15,即:F)表示的大小为 X * 16的N次方。
例:2AF5换算成10进制:
用竖式计算:
第0位:5 * 16^0 = 5
第1位:F * 16^1 = 240
第2位:A * 16^2= 2560
第3位:2 * 16^3 = 8192
-------------------------------------
10997
直接计算就是:
5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997本回答被网友采纳
相似回答