精华内容
下载资源
问答
  • 十六进制转换十进制原理介绍 十六进制转换为十进制,是先要将十六进制转换为二进制,在通过二进制转换为十进制。 十六进制转换为二进制很简单,我们首先要明白,一位十六进制代表四位二进制,如F对应二进制的1111,A...

    十六进制转换十进制原理介绍

    十六进制转换为十进制,是先要将十六进制转换为二进制,在通过二进制转换为十进制。
    十六进制转换为二进制很简单,我们首先要明白,一位十六进制代表四位二进制,如F对应二进制的1111,A代表二进制的1010,利用这种一一对应的关系,很容易就把十六进制转换为二进制,如0x1F6C,其中十六进制1对应二进制0001,十六进制F对应二进制1111,十六进制6对应二进制0110,十六进制C对应二进制1100,那么十六进制数0x1F6C对应的二进制数就是0001 1111 0110 1100。
    得到对应的二进制数后,再将二进制转换为十进制,这一步就更简单了,只需要套一个公式即可,二进制右边为低位,左边为高位,最右边的第一个数代表2的0次方,自右往左依次递增,1、2、3、4…,十六位的二进制数最高位就是2的16 - 1 = 15次方(因为最低位从0开始),将二进制每一位上的数作为系数,与该位对应的次方相乘,再将所有位算得的结果相加,最后得到的数便是二进制对应的十进制数。我们拿0001 1111 0110 1100为例,公式便为 f = 0 ∗ 2 0 + 0 ∗ 2 1 + 1 ∗ 2 2 + 1 ∗ 2 3 + 0 ∗ 2 4 + 1 ∗ 2 5 + 1 ∗ 2 6 + 0 ∗ 2 7 + 1 ∗ 2 8 + 1 ∗ 2 9 + 1 ∗ 2 1 0 + 1 ∗ 2 1 1 + 1 ∗ 2 1 2 + 0 ∗ 2 1 3 + 0 ∗ 2 1 4 + 0 ∗ 2 1 5 f = 0*2^0 + 0*2^1+1*2^2 + 1*2^3+0*2^4 + 1*2^5+1*2^6 + 0*2^7+1*2^8 + 1*2^9+1*2^10 + 1*2^11+1*2^12 + 0*2^13+0*2^14 + 0*2^15 f=020+021+122+123+024+125+126+027+128+129+1210+1211+1212+0213+0214+0215最后算得f = 8044,那么8044就是二进制0001 1111 0110 1100所对应的十进制数,同样也是十六进制数0x1F6C对应的十进制数。
    我们通篇以十六位的数来讲解的,其余位的数举一反三即可,原理相同。

    代码实现

    有了相关的知识之后,我们便可以很容易将代码实现

    #include "stdio.h"
    #include "math.h"
    unsigned short int DecData_16[4];      //用于存储十进制数,数组的大小根据自己的实际情况进行修改
    /* -------------------十六进制(十六位)转换为十进制--------------------- */
    void Hex2Dec_16(unsigned short int* temp)
    {
    	for(int i = 0;i < 4;i++)    //这里是4个十六进制数,所以只循环四次,根据自己的实际情况修改
    	{
    		unsigned short int Hex = temp[i];
    		unsigned short int Dec = 0;
    		for(int j = 0;j < 16;j++)   //16表示一个十六进制数一共16位,根据自己的实际情况进行修改
    		{
    			if(Hex & 0x0001)   //判断十六进制数对应的二进制的最后是0还是1,所以十六进制转换为二进制这一步工作代码暗中就已经实现了
    			{
    				Dec += pow(2,j);    pow(2,j)是math.h头文件里的库函数,进行次方运算
    				Hex >>= 1;   //这里的移位操作是对十六进制对应的二进制进行操作,不需要我们进行转换
    			}
    			else   //如果最后一位不是1
    			{
    				Dec += 0;   //则加0
    				Hex >>= 1;
    			}
    		}
    		DecData_16[i] = Dec;
    	}
    }
    

    到此为止我们便实现了十六进制到十进制的转换,关于十进制转换为十六进制,请参考链接: STM32 十进制转换成十六进制的实现(有例程),在Keil5里面用C语言实现,不用scanf函数.

    展开全文
  • 十进制转换十六进制,也就是 采用 除k取余法 ,直接让10处以16,再对 数据如果小于10和大于10进行处理,代码如下: #include<iostream> #include<string> using namespace std; int main() { ...

    十进制转换为十六进制,也就是 采用 除k取余法 ,直接让10处以16,再对 数据如果小于10和大于10进行处理,代码如下:

     

    #include<iostream>
    #include<string>
    using namespace std;
    int main()
    {
    	long a;//输入的数
    	int y=0;//循环中的余数
    	string s="";//输出的结果
    	cin>>a;
    	if(a==0)//0比较特殊,单独处理
    	{
    	cout<<0;
    	return 0;
    	}
     
    	while(a>0)//大于0的数
    	{
    		y=a%16;  //求余
    		if(y<10)   //小于10的余数
    		s=char('0'+y)+s;  //利用字符的ascll码在字符串前面拼接
    		else
    		s=char('A'-10+y)+s;  //大于9的余数用ABCDE表示
    		a=a/16;   
    	}
    	cout<<s;
    	return 0;
    }

     

    十六进制转换为10进制,采取的是 乘以16

    #include<iostream>  
    #include<string>  
    #include<math.h>  
    using namespace std;  
      
    int main()  
    {  
        string s;  
        int i=0,count,sum;  
        while(getline(cin,s))  
        {  
            int count=s.length();  
            sum=0;  
            for(i=count-1;i>=0;i--)//从十六进制个位开始,每位都转换成十进制  
            {  
                if(s[i]>='0'&&s[i]<='9')//数字字符的转换  
                {  
                    sum+=(s[i]-48)*pow(16,count-i-1);  
                }  
                else if(s[i]>='A'&&s[i]<='F')//字母字符的转换  
                {  
                    sum+=(s[i]-55)*pow(16,count-i-1);  
                }  
            }  
            cout<<sum;  
        }  
    }  

     

    十进制 转换为 二进制,采取的是 除2取余法,其中把 2 换成其他小于10的数,可以变成相应的 其他进制

     

    #include<iostream>
    
    using namespace std;
    
    int main(){
    	int a;
    	cin>>a;
    	int result=0;
    	int temp=a;
    	int j=1;
    	while(temp){
    		result=result+j*(temp%2);
    		temp=temp/2;
    		j=j*10;
    	}
    	
    	cout<<result<<endl;
    	
    	
    	return 0;
    } 

     

    展开全文
  • 十六进制转换成十进制公式是:要从右到左用二进制的每个数去乘以16的相应次方,然后这些数字相加就是了。 因此 0x122 转换为十进制:2* 16^0 +2* 16^1 + 1* 16^2 = 290 2AF5换算10进制: 第0位: 5 * 16^0 = ...

    已知 int a=0x122 ,则 a/2 为(145)

    0x表示16进制;

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

    因此 0x122 转换为十进制:2* 16^0 + 2* 16^1 + 1* 16^2 = 290

    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

    参考链接:十六进制转换成十进制的具体算法?

    展开全文
  • 非(qiang)常(po)乐(zi)意(ji)来一起讨论下如何十六进制

    非(qiang)常(po)乐(zi)意(ji)来一起讨论下如何十六进制转成十进制算法。

    OK,开始前我不得不再次普及下基础知识。基础知识学不好,就好比一座地基不稳,材质松垮的危房。

    强调几点:

    十六进制数0xFF,代表:一个字节(byte) = 8bits 。写成2进制0b11111111,这里的1各自占1bit.

    而十六进制中F是占4bit 。十六进制一个位范围是0x0-0xF  不就是刚刚对应0x0000~0x1111 。我们平常所说的32位数据 其实数值范围就是0x00000000(8个0)~0xFFFFFFFF(8个F) ,为什么要举32位数据,因为你肯定不陌生 int类型了解吧?一般来说就是代表32位整形数据。 最后在来一个0x12F

    你可以先写成二进制0b0001 0010 1111,其实呢前面3个0省略吧,那就写成0b1 0010 1111.现在知道占几位了吧 9bit.但是貌似八进制无法满足它,装不下了,那用十六进制存吧 int16_t = short int。一般我们可以那么写  typedef  short int  int16_t 。


    //今天只能讲思路 时间不允许

    好了,小菜结束。还是来个简单的开始。给定一个十六进制数 小于32bits 例如0x123456F  转成十进制。

    转换公式应该是1 *16^6 +2*16^5+3*16^4+...+6*16^1+F*16^0   很简单吧.......  人工算是这样没错,因为一目了然啊,但是我们需要的是一个程序,它的要求是:

    1.输入 123456F 或者其他的数

    2.输出 对应的十进制值

    先解决输入问题 ,在提下 我们这加了限定条件小于32位。 

    说几种形式的输入方法吧,%x,以十六进制输入,%d,以十进制输入。这两者可完全不同,例如你输入1234 前者可是会把他当做十六进制0x1234 后者就是当做十进制。分析下:前者貌似你输入 然后直接%d输出下 结果值就来了。。。。。可行 但意义不大 后者你还要先从每一位取出来,取出 1 ,2,3,4 然后在用公式转换,取的过程你可以用除法取余,可行但太麻烦。

    那我们只能换一种方法了......试想下 我们把1234当做字符串“1234” 而输入的'1','2','3','4'就是字符,字符用什么输入?%c!!那字符串呢,%s!!!

    那我们要把“1234”用什么存储起来??char  str[32],字符类型的数组嘛!那输入语句怎么写?scanf("%s",str);  这里的str可是数组的首地址哦。或者会用指针的同志们也可以这样写 char *str; 输入语句scanf("%s",str);现在str[32]数组中存储好了“1234”,他们分别存储在str[0]='1' str[1]='2' str[2]='3' str[3]='4'。以此类推别的数也那么操作。

    这样貌似还不行,字符串'1'ASCII代表0x31 但是我们要的就是1啊 所以只能减去0x30了。。。。‘2’-0x30=2 .. 0-9都可以这样换算,那么问题来了'A'呢 ascii码中代表0x41 但是'A'应该等于十六进制的0xA =十进制的10 怎么换算不用我说了吧减去55(十进制)。

    之后取数 然后套公式了



    进阶篇。

    上述虽然可以输入很多位的字符串十六进制,但是为啥输出老是会死机。。。。很简单 你输出......你用什么来保存那个结果值,不会是int吧?还是long int 还是longlong ? 你要思考下 我用这个存储会不会溢出!!我要计算0xFFFFFFFFFFFFFFFFFFFFFFFFFF不溢出才怪。。。。。

    我们的算法呢 还是老样子。现在我们对输入没有位数要求了, 比如我们输入0xEEEE EEEE EEEE EEEE EEEE 80位数据

    我们计算结果是 E*16^19 +E* 16^18 +...+ E*16^1+E*16^0  。输入我们可以用前面的方法搞定 没有问题 很OK

    但是关键就是怎么存这个结果值 这个结果值明显超出了我们的认知数据类型 用啥类型都不行诶。YY下结果值是1234567890000210312093912039103901293021930219301293019301930.....(纯属YY

    NND 怎么办 怎么办 怎么办......突然我灵机一动,结果值弱是上面这个数,我又该怎么存? 认识中我们分个十百千 十万 百万 千万.....那么我把每一位都单独看成一位可以吗?OK的!比如我用char rst[100000]来存储这个结果值,最低位从rst[0]开始存起。

    打个比方 方便理解 十进制结果值123456789 存到rst就是 rst[0]=9 rst[1]=8.....rst[8]=1 注意合理存的就是十进制的值 而非字符!



    位数...876543210
    rst[]存的值 123456789

    原谅我 在mac都没下个画图软件  反正存储就是这样。现在我要将123456789 * 10 。那么我们应该怎么操作? 自然要用到我们小学的方法啦,将123456789 每一位乘以10 然后相加!结果如下表格

    位数。。。876543210
    rst[]存的值 102030405060708090

    可是我们事先规定了 rst 每一位 也就是数组每一个元素最多只能存储0-9。尼玛你存个90 80 70算什么意思。心中呐喊 给我进位去!!!!!!从个位开始90/10 =9 余数0 尼玛进位干脆 什么都没留下 倒是给前面一位贡献了一个9.OK那么现在rst[0]只能存储0了。现在看十位 80,别忘记有个进位9 加起来就是89/10 = 8 余数9。这个还不错 给自己留了点 rst[1]=9.看百位70 +进位8等于78/10=7 余数8 ,因此rst[2]=8............以此类推上去吧,如果不懂 敲下自己脑袋 在看一遍。以上就是我要给大家介绍的主要东西 这里看懂了,恭喜你 差不多了。也快到结尾了吧,但是尼玛关键这和十六进制转十进制毛关系啊!!!!咳咳....好吧 回归到前面的一个公式

    比如我们输入0xEEEE EEEE EEEE EEEE EEEE 80位数据

    我们计算结果是 E*16^19 +E* 16^18 +...+ E*16^1+E*16^0  。E*16^19 +E* 16^18 +...+ E*16^1+E*1  提取公因数16(排除最后一项)

    16*(E*16^18 +E* 16^17 +...+ E*16^0)+E  里面在提取16  重复直到最里面只有一个E。

    刚才是倒着推倒  现在顺着推。E*16^0 -> E* 16^1+E -> E*16^2 +E*16+E->E*16^3 +E*16^2 +E*16+E ->.....我不知道大家看明白了没,后面一项都是前面一项乘以16+E(这里由于我们采用了特殊值 其实不是固定值E)的结果。如果第一项作为一个结果值,存储在rst[]中,想要得到第二项的值,我们要做的是rst[]的每一位*16 + 某个值。前者我已经教了如何求乘积值了,至于在加上某个值。我想难不倒你吧

    刚才取了一个特殊值0xEEEE EEEE EEEE EEEE EEEE 我觉得不好  现在取个稍微正常点的值

    0x1234 5679 我又调皮了。。。。。。。

    按照刚才所讲,我们都是从高位开始求 rst[]代表一个数组来保存结果值,rst[]=1 -----> rst[] =1*16+2-------->rst[] =(1*16+2)*16+3 ---------->((1*16+2)*16+3)*16+4 .............   这样写不知道能理解不?  rst[]只是作为一个整体来保存结果值,后一次的结果值都是前一次结果值*16加上新加入运算位数值。




    It's   over!!!!!!!!!代码以后在贴吧


    展开全文
  • Java 二进制,八进制,十进制十六进制转换 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 /**  * Java 二...
  • 字符串转换成十进制整数 (15分) 输入一个以#结束的字符串,本题要求滤去所有的非十六进制字符(不分大小写),组成一个新的表示十六进制数字的字符串,然后将其转换十进制数后输出。如果在第一个十六进制字符之前...
  • C语言,实现进制转换十进制转换十六进制 例如输入10,转换结果为a
  • 十六进制转换十进制算法

    千次阅读 2016-07-14 15:43:26
    比如说。...十六进制已开头 0x 表示 计算机表达 0x12 ^表示次方 计算公式: 拆分数字 * 16 ^ (数字位置-1)  如何进行去换算。 单独把 12 拎出来 12 的十六进制= 1*16^1 + 2*16^0 = 16 + 2 = 18
  • 十进制转十六进制计算器十进制:十六进制:进制:进制:转换说明:上面第一行可将十进制转换为十六进制,第二行可以将任意进制转换为任意进制。...十进制与十六进制互转算法1、十六进制转换为十进...
  • 二进制 → 十进制八进制 → 十进制十六进制十进制十进制) → (二、八、十六进制十进制 → 二进制十进制 → 八进制十进制十六进制 (二进制) ↔ (八、十六进制) 二进制
  • (二、八、十六进制) → (十进制) 二进制 → 十进制 八进制 → 十进制 十六进制十进制十进制) → (二、八、十六进制十进制 → 二进制 十进制 → 八进制 十进制十六进制 ...
  • 首先定义一个字符串数组,它的公式是sum=sum*16+a; a代表的是一个个字符,存的是ASCII码,所以不能直接加起来,必须转换为真正的数值,当a为字母时,a=a-‘7’,当a是数字时,a=a-‘0’。 代码 #define _CRT_SECURE...
  • 举例:十进制 91=9X10+1;八进制 76=7X8+6=62;十六进制11=1X16+1=17.十六进制的10到16用字母表示。 依次为1,2,3,4,5,6,7,8,9,A,B,C,D,E,F ,16
  • 一.本文所涉及的内容...二进制 → 十进制八进制 → 十进制十六进制十进制十进制) → (二、八、十六进制十进制 → 二进制十进制 → 八进制十进制十六进制 (二进制) ↔ (八、十六进制) 二进制
  • 此文章转载的,与大家...(二、八、十六进制) → (十进制) 二进制 → 十进制 八进制 → 十进制 十六进制十进制十进制) → (二、八、十六进制十进制 → 二进制 十进制 → 八进制 十进制 →...
  • 文章目录一、总体框架二、二进制、八进制、十六...在这里给大家一个二进制、八进制、十六进制转换十进制的转换公式: 举例: 二进制110101转换为十进制数等于多少? 解:因为是二进制转换为十进制,所以R=2。 (110.
  •  1、在EXCEL表格中,将十六进制转换十进制的常用方法是:使用HEX2DEC函数。  2、在EXCEL的一个单元格中,如果输入形如"12E36"之类的可以被成功识别为“科学计数法”的文本,EXCEL就会自动将该单元格中的文本以...
  • 十进制十六进制数相互转换(含小数),整数,小数都可达15位
  • 例:2AF5换算10进制: 用竖式计算: 第0位: 5 * 16^0 = 5 第1位: F * 16^1 = 240 第2位: A * 16^2= 2560 第3位: 2 * 16^3 = 8192 直接计算就是: 5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 1...
  • 二、八、十六进制转换(图解篇) 原文:二、八、十六进制转换(图解篇)一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 背景(Contexts) 进制转换算法(Convert) ...
  • 二进制、十六进制转换

    千次阅读 2019-10-04 01:28:25
    原文:http://suishoujie.blog.163.com/blog/static/60628058200841552235617/ 十六进制十进制、二进制转换: 十进制转二进制方法:8421法 例如:把10010110转换成十进制 128 64 32 16 8 4 2...
  • 计算十六进制数2BF7转二进制数:三、十六进制十进制计算十六进制数转十进制数的方法:计算十六进制数2BF7转成十进制数:四、十六进制转八进制方法一:先转换成二进制,然后转换成八进制。方法二:先转换成十进制...
  • 一、二进制 十进制十六进制 X进制 逢X进1 数制的计算 二、数制的转换 十进制--->二进制 十进制--->十六进制 二进制--->十进制 二进制--->十六进制 十六进制--->二进制 十六进制--->...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 8,538
精华内容 3,415
关键字:

十六进制转换成十进制公式