范文一:二进制转十进制
二进制转十进制是从最后一位算,具体是这样的::
如:01101011.转十进制: 第0位:1乘2的0次方=1
1 1乘2的1次方=2 :2 0乘2的2次方,0 3 : 1乘2的3次方,8 4: 0乘2的4次方,0 5: 1乘2的5次方,32 6 1乘2的6次方,64 7: 0乘2的7次方,0 然后:1,2,0
,8,0,32,64,0,107( 二进制01101011,十进制107( 你可明白,可再问(
十进制转二进制:
是一个连续除2的过程(用上例转换:
107除2商53余1
53除2商26余1
26除2商13余0
13除2商6余1
6 除2商3余0
3 除2商1余1
1 除2商0余1(
当商出现0时,就不要除了(然后把余数反住排列就行了(107,1101011(
二进制转十进制
从最后一位开始算,依次列为第0、1、2...位
第n位的数(0或1)乘以2的n次方
得到的结果相加就是答案 例如:01101011.转十进制: 第0位:1乘2的0次方=1 1乘2的1次方=2
0乘2的2次方,0
1乘2的3次方,8
0乘2的4次方,0
1乘2的5次方,32
1乘2的6次方,64
0乘2的7次方,0
然后:1,2,0
,8,0,32,64,0,107(
二进制01101011,十进制107(
十进制转二进制:
用2辗转相除至结果为1
将余数和最后的1从下向上倒序写 就是结果
例如302
302/2 = 151 余0
151/2 = 75 余1
75/2 = 37 余1
37/2 = 18 余1
18/2 = 9 余0
9/2 = 4 余1
4/2 = 2 余0
2/2 = 1 余0
故二进制为100101110
进制概念
1。 十进制
十进制使用十个数字(0、1、2、3、4、5、6、7、8、9)记数,基数为10,逢十进一。
历史上第一台电子数字计算机ENIAC是一台十进制机器,其数字以十进制表示,并以十进制形式运算。设计十进制机器比设计二进制机器复杂得多。而自然界具有两种稳定状态的组件普遍存在,如开关的开和关,电路的通和断,电压的高和低等,非常适合表示计算机中的数。设计过程简单,可靠性高。因此,现在改为二进制计算机。
2。 二进制
二进制以2为基数,只用0和1两个数字表示数,逢2进一。
二进制与遵循十进制数遵循一样的运算规则,但显得比十进制更简单。例如:
(1)加法:0+0=0 0+1=1 1+0=1 1+1=0
(2)减法:0-0=0 1-1=0 1-0=1 0-1=1
(3)乘法:0*0=0 0*1=0 1*0=0 1*1=1
(4)除法:0/1=0 1/1=1,除数不能为0
3。 八进制
所谓八进制,就是其基数为8,基数值可以取0、1、2、3、4、5、6、7共8个值,逢八进一。
八进制与十进制运算规则一样。那么为什么要用八进制呢,难道要设计八进制的计算机么,实际上,八进制与十六进制的引用,主要是为了书写和表示方便,因为二进制表示位数比较长。如:(1024)10 用二进制表示为 (10000000000)2,共有11个数字,用八进制表示为(2000)8。更重要的是,由于二进制与八进制存在在一种对等关系,每三位二进制与一位八进制数完全对等(23=8)。所以二进制和十进制在运算上无区别,而时进制不具备这一优点。
4。 十六进制
十六进制应用也是非常广泛的一种计数制。在使用者看来,十六进制是二进制数的一种更加紧凑的一种表示方法。
基数为:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F,逢十进一。在十六进制系统中,数值为10到15的数分别用A、B、C、D、E、F表示。
二进制数及与之等值的八进制、十进制和十六进制数
二进制 八进制 十进制 十六进制
0000 0 0 0
0001 1 1 1
0010 2 2 2
0011 3 3 3
0100 4 4 4
0101 5 5 5
0110 6 6 6
0111 7 7 7
1000 10 8 8
1001 11 9 9
1010 12 10 A
1011 13 11 B
1100 14 12 C
1101 15 13 D
1110 16 14 E
1111 17 15 F
二。进制转换
1。二进制与十进制数间的转换
(1)二进制转换为十进制
将每个二进制数按权展开后求和即可。请看例题:
把二进制数(101.101)2=1*22+0*21+1*20+1*2-1+0*2-2+1*2-3=(5.625)10
(2)十进制转换为二进制
一般需要将十进制数的整数部分与小数部分分开处理。
整数部分计算方法:除2取余法 请看例题:
十进制数(53)10的二进制值为(110101)2
小数部分计算方法:乘2取整法,即每一步将十进制小数部分乘以2,所得积的小数点左边的数字(0或1)作为二进制表示法中的数字,第一次乘法所得的整数部分为最高位。请看例题:
将(0.5125)10转换成二进制。(0.5125)10=(0.101)2
2。 八进制、十六进制与十六进制间的转换
八进制、十六进制与十六进制之间的转换方法与二进制,同十进制之间的转换方法类似。例如:
(73)8=7*81+3=(59)10
(0.56)8=5*8-1+6*8-2=(0.71875)10
(12A)16=1*162+2*161+A*160=(298)10
(0.3C8)16=3*16-1+12*16-2+8*16-3=(0.142578125)10
十进制整数?????八进制 方法:“除8取余”
十进制整数?????十六进制 方法:“除16取余” 例如:
(171)10=(253)8
(2653)10=(A5D)16
十进制小数?????八进制小数 方法:“乘8取整”
十进制小数?????十六进制小数 方法:“乘16取整” 例如:
(0。71875)10=(0.56)8
(0.142578125)10=(0.3C8)16
3. 非十进制数之间的转换
(1)二进制数与八进制数之间的转换
转换方法是:以小数点为界,分别向左右每三位二进制数合成一位八进制数,或每一位八进制数展成三位二进制数,不足三位者补0。例如:
(423。45)8=(100 010 011.100 101)2
(1001001.1101)2=(001 001 001.110 100)2=(111.64)8
2。二进制与十六进制转换
转换方法:以小数点为界,分别向左右每四位二进制合成一位十六进制数,或每一位十六进制数展成四位二进制数,不足四位者补0。例如:
(ABCD。EF)16=(1010 1011 1100 1101.1110 1111)2
(101101101001011.01101)2=(0101 1011 0100 1011.0110 1000)2=(5B4B。68)16
进制转换是不可不懂,多看就会啦~我也是学计算机的,书面考试时进制转换
的方法这些都要熟~
哈哈~
这样,还行吧~
16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。字母不区分大小写。
十六进制数的第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 * 160 = 5
第1位: F * 161 = 240
第2位: A * 162 = 2560
第3位: 2 * 163 = 8192 ,全部相加即为答案=10997 直接计算就是: 5 * 160 + F * 161 + A * 162 + 2 * 163 = 10997 (别忘了,在上面的计算中,A表示10,而F表示15)
现在可以看出,所有进制换算成10进制,关键在于各自的权值不同
有一个公式:二进制数、八进制数、十六进制数的各位数字分别乖以各自的基数的(N-1)次方,其和相加之和便是相应的十进制数。个位,N=1;十位,N=2...举例:
110B=1*2的2次方+1*2的1次方+0*2的0次方=0+4+2+0=6D 110Q=1*8的2次方+1*8的1次方+0*8的0次方=64+8+0=72D 110H=1*16的2次方+1*16的1次方+0*16的0次方=256+16+0=272D 2、十进制数转二进制数、八进制数、十六进制数
方法是相同的,即整数部分用除基取余的算法,小数部分用乘基取整的方法,然后将整数与小数部分拼接成一个数作为转换的最后结果。
3、二进制数转换成其它数据类型
3-1二进制转八进制:从小数点位置开始,整数部分向左,小数部分向右,每三位二进制为一组用一位八进制的数字来表示,不足三位的用0补足, 就是一个相应八进制数的表示。
010110.001100B=26.14Q
八进制转二进制反之则可。
3-2二进制转十进制:见1
3-3二进制转十六进制:从小数点位置开始,整数部分向左,小数部分向右,每四位二进制为一组用一位十六进制的数字来表示,
不足四位的用0补足,就是一个相应十六进制数的表示。
00100110.00010100B=26.14H
十进制转各进制
要将十进制转为各进制的方式,只需除以各进制的权值,取得其余数,第一次的余数当个位数,第二次余数当十位数,其余依此类推,直到被除数小于权值,最后的被除数当最高位数。
一、十进制转二进制
如:55转为二进制
2,55
27――1 个位
13――1 第二位
6――1 第三位
3――0 第四位
1――1 第五位
最后被除数1为第七位,即得110111
二、十进制转八进制
如:5621转为八进制
8,5621
702 ―― 5 第一位(个位)
87 ―― 6 第二位
10 ―― 7 第三位
1 ―― 2 第四位
最后得八进制数:127658
三、十进制数十六进制
如:76521转为十六进制
16,76521
4726 ――5 第一位(个位)
295 ――6 第二位
18 ――6 第三位
1 ―― 2 第四位
最后得1276516
二进制与十六进制的关系
2进制 0000 0001 0010 0011 0100 0101 0110 0111
16进制 0 1 2 3 4 5 6 7
2进制 1000 1001 1010 1011 1100 1101 1110 1111
16进制 8 9 a(10) b(11) c(12) d(13) e(14) f(15)
可以用四位数的二进制数来代表一个16进制,如3A16 转为二进制为: 3为0011,A 为1010,合并起来为00111010。可以将最左边的0去掉得1110102
右要将二进制转为16进制,只需将二进制的位数由右向左每四位一个单位分隔,将各单位对照出16进制的值即可。
二进制与八进制间的关系
二进制 000 001 010 011 100 101 110 111 八进制 0 1 2 3 4 5 6 7
二进制与八进制的关系类似于二进制与十六进制的关系,以八进制的各数为0到7,以三位二进制数来表示。如要将51028 转为二进制,5为101,1为001,0为000,2为010,将这些数的二进制合并后为1010010000102,即是二进制的值。
若要将二进制转为八进制,将二进制的位数由右向左每三位一个单位分隔,将事单位对照出八进制的值即可。
一.在计算机应用中,二进制使用后缀b表示;十进制使用后缀d表示,八进制用Q表示,十六制使用后缀H表示。
二.二进制,十六进制与十进制的计算转换
1.二进制转换为十进制
计算公式:二进制数据X位数字乘以2的X-1次方的积的总和 例:10101011b=( )d
数据
1 0 1 0 1 0 1 1
X-1位
7 6 5 4 3 2 1 0
相应的十进制值即为:27 +25+23+21+20=128+32+8+2+1=171
2.十六进制转换十进制
计算公式:二进制数据X位数字乘以16的X-1次方的积的总和(与二进制转换十制进同理的,将底数换为16)
注意:在十六进制中,10,16依次用A,B,C,D,E,F表示 例:1F3E H=( )d
计算:1*16的3次方+16*16的2次方+3*16的1次方+15*16的0次方=1*4096+16*256+3*16+15*16=4096+4096+48+240=8480
三.十进制与二进制,十六制的计算转换
1.十进制转换为二进制
十进制数据数字除以2的余数的逆序组合
例:404d=( )b
2,404 余0
2,202 余0
2,101 余0
2,50 余1
2,25 余0
2,12 余1
2,6 余0
2,3 余1
2,1
计算结果便是:110101000
2.十进制转换十六进制。。。与上面同理,注意的是10以上的数字用字母表示,除数是16
十六进制与二进制的转换,建议通过十进制来进行中转。
带小数点的十进制转换为二进制时同理,小数店后的数位指数为负指数
一、二进制数转换成十进制数
由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为"按权相加"法。
二、十进制数转换为二进制数
十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。
1. 十进制整数转换为二进制整数
十进制整数转换为二进制整数采用"除2取余,逆序排列"法。具体做法是:用2去除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为零时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来。
2(十进制小数转换为二进制小数
十进制小数转换成二进制小数采用"乘2取整,顺序排列"法。具体做法是:用2乘十进制小数,可以得到积,将积的整数部分取出,再用2乘余下的小数部分,又得到一个积,再将积的整数部分取出,如此进行,直到积中的小数部分为零,或者达到所要求的精度为止。
然后把取出的整数部分按顺序排列起来,先取的整数作为二进制小数的高位有效位,后取的整数作为低位有效位。
回答者:HackerKinsn - 试用期 一级 2-24 13:31
1(二进制与十进制的转换
(1)二进制转十进制
方法:"按权展开求和"
例:
(1011.01)2 ,(1×23,0×22,1×21,1×20,0×2,1,1×2,2)10 ,(8,0,2,1,0,0.25)10
,(11.25)10
(2)十进制转二进制
? 十进制整数转二进制数:"除以2取余,逆序输出"
例: (89)10,(1011001)2 2 89
2 44 …… 1
2 22 …… 0
2 11 …… 0
2 5 …… 1
2 2 …… 1
2 1 …… 0
0 …… 1
? 十进制小数转二进制数:"乘以2取整,顺序输出"
例:
(0(625)10= (0(101)2 0(625
X 2
1(25
X 2
0(5
X 2
1(0
范文二:二进制转化十进制
89C5l系列单片机历经20多年的发展,仍然长盛不衰,在工业控制及仪器仪表中得到广泛应用;用于89C5l单片机软件开发的Keil C51编译系统也日臻成熟,成为89C5l系列单片机软件开发的优先选择。在单片机系统开发中,经常遇到整数二十进制转换的问题,一般可以采用C语言中的标准函数sprintf()来实现;但由于该函数是通用格式输出函数,代码量大(超过l KB),用于整数二一十进制转换的运算时间过妊(在12 MHz晶振频率下超过l ms),这在计算密集(computation intensive)的应用中是一个影响系统性能的重要因素。在低功耗系统设计中,也必须考虑因为运算时间长而增加系统耗电量的问题。经常有网发询问如何高效地实现这种转换。笔者通过对二进制整数的深入分析,巧妙运用89C5l单片机的特殊单字节乘除指令,成功地实现了整数二一十进制转换的快速算法。本文将详细介绍快速算法,给出颇具实用性的优化代码,并与使用sprintf()函数的实现及传统的汇编代码实现进行性能比较。
1 传统的汇编代码实现
要实现快速运算,很自然地想到教科书中提到的双字节二进制整数转换成3字节BCD码整数的子程序。其采用的算法是,依次将整数的每位左移至CY位,再把CY位左移至一个3字节队列中,并进行十进制调整。通过16次移位完成运算,结果为压缩格式的3字节BCD编码。
汇编子程序如下:
该算法代码简洁明了,只使用51条指令代码,但执行这段程序却要耗费312个指令周期。如果要符合C51调用规则,则要多出25个指令代码空间和21个指令周期,显然效率不高。
2 快速算法
快速算法从千位入手,首先求取整数中包含l 000的个数(以下称为“千数”)。求取了千数,其他问题就迎刃而解了。
设二进制整数以b=[b15…b0]表示,取值范围为O,65535。其高6位[b15…b10]取值
63,在整数中代表的数值为(0,63)*1024;后10位[b9…b0]代表的数值范围为范围为0,
O,l 023。可以写出如下算式:
可以用[b15…b10]作为整数中千数的预估。
余数的最大值为63×24+1 023=2535。这表明余数中最多还有2个l000,也就是说千数的预估误差最多为2,因此最多通过2次校正,就可求得千数的准确值。2次校正方法:
?如果余数高位字节?4(即余数?1024,这样用只是为了简化代码;也可以用余数?1000的判定条件),则千数+l,余数,1000;
?如果余数?l000,则千数+1,余数,l000。
至此就求出了千数。千数用10整除所得商和模余作为万位数和千位数。
从余数中求取百、十,个位数也很简单:
余数用100整除得到百位数。实际是先把余数右移2位,此时已成单字节数,再用单字节除指令进行除以25的操作,即得到百位数;而除去百位后的余数已是单字节数,可轻易取得十位数与个位数。
用C语言编写的函数如下:
在Keil C51集成环境中,为该函数生成汇编程序源码,再对源码进行优化,最后得到满足C51调用规则的、效率极高的汇编语言源代码。(源代码见本刊网站www(mesnct(com(cn——编者注。)
这个汇编语言源代码可以直接作为项目文件使用,也可以用来生成函数库。
3 性能比较
(1)与传统汇编语言的性能比较
符合C5l调用规则的传统汇编语言子程序占用76字节的代码空间,耗用333个指令周期;快速算法最多耗用107个指令周期,耗时只有传统算法的32,。
(2)与使用sprintf()函数相比较
使用如下的程序来比较二者的性能:
sprintf()函数占用1064字节的代码空间,耗用1151个指令周期;快速算法占用97字节的代码空间,最多耗用107个指令周期,只占使用sprintf()函数耗时的9(3,。
结论
无论是与传统汇编语言子程序,还是与使用sprintf()函数的程序相比,快速算法都有很
大的速度优势;是一种针对8位机的创新算法,具有很强的工程实用性,值得推广应用。
范文三:十进制二进制转化
#include"stdio.h"
#include "stdlib.h"#define TRUE 1
#define FALSE 0
#define MAX_SIZE 10#define ElemType inttypedef struct
{
ElemType Elem[MAX_SIZE];
int top;
}STACK;
#include"s_h.h"
#include //循列的和运算环环环环环环环环环 //循列的描述环环环环环环 #define QueueSize 100 //定列最大容量环环环环环环环typedef int DataType; //定列元素型环环环环环环环 typedef struct cirqueue{ DataType data[QueueSize];//环环列元素定 int front; //环环环环环指定 int rear; //环环环环尾指定 int count; //环环数器定 }CirQueue; //置空环环 void InitQueue(CirQueue *Q) { Q->front=Q->rear=0; Q->count=0; //环数器置0 } //判空环环 int QueueEmpty(CirQueue *Q) { return Q->count==0; //环环环列无元素空 } //判环环 int QueueFull(CirQueue *Q){ return Q->count==QueueSize; //环中元素个数等于QueueSize环环环 } //入环 void EnQueue(CirQueue *Q,DataType x) { if(QueueFull(Q)) {puts("环环"); exit(0);} //环环上溢 Q->count ++; //环列元素个数加1 Q->data[Q->rear]=x; //新元素插入尾环环 Q->rear=(Q->rear+1)%QueueSize; //循意下将尾指加环环环环环环环环环1 } //出环 DataType DeQueue(CirQueue *Q){ DataType temp; if(QueueEmpty(Q)) {puts("环空"); exit(0);} //环空下溢 temp=Q->data[Q->front]; Q->count--; //环列元素个数减1 Q->front=(Q->front+1)%QueueSize; //循意下的指加环环环环环环环环环1 return temp; } //取元素环环环环 DataType QueueFront(CirQueue *Q) { if(QueueEmpty(Q)) {puts("环空"); exit(0);} return Q->data[Q->front];} //初始化环 void InitStack(STACK *s){ s->top=-1; } //入操作环环环 void push(STACK *s,ElemType e){ if(s->top==MAX_SIZE-1) printf("环环环环环环环环环环已,元素不能再!\n"); else { s->top++; s->Elem[s->top]=e; } } //出操作环环环 void pop(STACK *s,ElemType *e){ if(s->top==-1) printf("环环环空,没有元素可以出!\n"); else { *e=s->Elem[s->top]; s->top--; } } //环环环环环环环环环环环环环环制,十制二制, void convert1(float n){int flag=0; CirQueue La; int num; DataType e; InitQueue(&La); while(n>=0.001) { EnQueue(&La,(int)(n*2)); n=n*2-(int)(n*2); } //printf("环环环环环环环后的二制数据:"); while(La.count!=0) { flag++; if (flag>=6) exit(0); e=DeQueue(&La); printf("%d",e); } printf("\n"); } void convert(int n){ int m; STACK s; InitStack(&s); while(n!=0) { push(&s,n%2); n=n/2; } printf("环环环环环环环后的二制数据:"); while(s.top!=-1) { pop(&s,&m); printf("%d",m); } printf("%c",'.');} void main() { float a,b; //环环环环环制用 float jy; int num; printf("环环环环环环环环环环入所要的十制数据:"); jy=120.87; //scanf("%f",&a); scanf("%f",&jy); num=(int)jy; b=jy-num; printf("%5.4f",b); convert(num); convert1(b); } 二进制数 十进制整数相互转换 1,十进制整数转换为二进制数 转换方法:除二逆取余数法 ,(617)=( 1001101001 )例110 2 余数 2 617 1 2 308 0 2 154 0 2 77 1 2 38 0 2 19 1 2 9 1 2 4 0 2 2 0 2 1 1 2 0 2,二进制数转换为十进制整数 转换方法:将位权值相加 例1, 先看十进制整数的位权值 一个十进制整数 12345 43210其位权 10 10 10 10 10 4 3210其位权值的和 1X 10+ 2X 10+ 3X 10+ 4X 10+5X 10= =1X10000+2X1000+3X100+4X10+5X1 =10000+2000+300+40+5 =12345 例2, 将上例十进制整数转换为二进制数的 (1001101001 )= (617) 2 10 一个二进制整数 1001101001 9876543210其位权 2 2 2 2 2 2 2 2 2 2 9876543210其位权值的和=1X2w+0X2+0X2+1X2+1X2+0X2+1X2+0X2+0X2+1X2 =1X512+0X256+0X128+1X64+1X32+0X16+1X8+0X4+0X2+1X1 =512+0+0+64+32+0+8+0+0+1 =617 十进制数,有十个数0,1,2,3,4,5,6,7,8,9,逢十进一 二进制数,有二个数0,1,逢二进一 十进制数: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 对应 二进制数:00,01,10,11,100,101,110,111,1000,1001,1010 1098765432102 2 2 2 2 2 2 2 2 2 2 1024 512 256 128 64 32 16 8 4 即:从最后一位开始算,依次列为第 0、 1、 2..... n 位,第 n 位的数 (即 0或 1) 乘以 2的 n 次方 得到的结果相加就是十 进制数。 如:把二进制数 01101011. 转十进制 : 第 0位 1:1乘 2的 0次方 =1 第 1位 1:1乘 2的 1次方 =2 第 2位 0:0乘 2的 2次方 =0 第 3位 1:1乘 2的 3次方 =8 第 4位 0:0乘 2的 4次方 =0 第 5位 1:1乘 2的 5次方=32 第 6位 1:1乘 2的 6次方=64 第 7位 0:0乘 2的 7次方 =0 然后把所有乘积相加:1+2+0+8+0+32+64+0=107。 即:二进制数 01101011=十进制数 107. 就是用十进制数连续除以 2后余数为二进制末尾数的逆 顺序排列。 例:十进制数 2021,用二进制表示,就是用 2021除以 2, 余数记下 , 然后继续往下除 , 若余 0(即整除视为余 0) 也记下来。 如: 2021/2=1010......1 1010/2=505........0 505/2=252..........1 252/2=126..........0 126/2=63............0 63/2=31..............1 31/2=15..............1 15/2=7................1 7/2=3..................1 3/2=1..................1 1/2=0..................1 然后,把所有的余数按逆顺序合并排列即:1111100101就是 所求的二进制数 2021。范文四:二进制转十进制
范文五:二进制转十进制