八进制数和十进制数相互转换
- 格式:doc
- 大小:148.52 KB
- 文档页数:18
进制转换规则⼀、⼗进制与⼆进制之间的相互转换⼗进制——>⼆进制1. 整数部分和⼩数部分分别转换,2.⼗进制整数转换为⼆进制整数:除2,由下往上取余3.⼗进制⼩数转换为⼆进制⼩数:乘2,由上往下取整⼆进制——>⼗进制将⼆进制数的每⼀位数乘以它的权,然后相加,即可求得对应的⼗进制数值。
⼆、⼋进制与⼗进制、⼆进制之间的相互转换⼆进制——>⼋进制从⼩数点起,每三位⼆进制位分成⼀组(不⾜3位时,在⼩数点左边时左边补0,在⼩数点右边时右边补0),然后写出每⼀组的等值⼋进制数,顺序排列起来就得到所要求的的⼋进制数。
⼋进制——>⼆进制将每⼀位⼋进制数⽤三位⼆进制数表⽰,就可以直接将⼋进制数转换成⼆进制数。
⼋进制——>⼗进制将⼋进制数的每⼀位数乘以它的权,然后相加,即可求得对应的⼗进制数值。
⼗进制——>⼋进制1. 整数部分和⼩数部分分别转换,2.⼗进制整数转换为⼋进制整数:除8,由下往上取余3.⼗进制⼩数转换为⼋进制⼩数:乘8,由上往下取整三、⼗六进制与⼗进制、⼆进制之间的相互转换⼗六进制——>⼗进制将⼗六进制数的每⼀位数乘以它的权,然后相加,即可求得对应的⼗进制数值。
⼗进制——>⼗六进制1. 整数部分和⼩数部分分别转换,2.⼗进制整数转换为⼗六进制整数:除16,由下往上取余3.⼗进制⼩数转换为⼗六进制⼩数:乘16,由上往下取整⼗六进制——>⼆进制将每⼀位⼗六进制数⽤四位⼆进制数表⽰,就可以直接将⼗六进制数转换成⼆进制数。
⼆进制——>⼗六进制从⼩数点开始,每4位⼆进制数为⼀组(不⾜4位时,在⼩数点左边时左边补0,在⼩数点右边时右边补0),将每⼀组⽤相应的⼗六进制数符来表⽰,即可得到正确的⼗六进制数。
十进制转二进制: 用 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 二进制转十进制 从最后一位开始算,依次列为第 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. .十进制转二进制(整数及小数部分): 十进制转二进制(整数及小数部分):1、把该十进制数,用二因式分解,取余。
、把该十进制数,用二因式分解,取余。
以 235 为例,转为二进制 235 除以 2 得 117,余 1 117 除以 2 得 58,余 1 58 除以 2 得 29,余 0 29 除以 2 得 14,余 114 除以 2 得 7,余 0 7 除以 2 得 3,余 1 3 除以 2 得 1,余 1 从得到的 1 开始写起,余数倒排,加在它后面,就可得 11101011。
2、把十进制中的小数部份,转为二进制。
、把十进制中的小数部份,转为二进制。
把该小数不断乘 2,取整,直至没有小数为止,注意不是所有小数都能转为二进制! 以 0.75 为例, 0.75 剩以 2 得 1.50,取整数 1 0.50 剩以 2 得 1,取整数 1,顺序取数就可得 0.11。
c语言中的二进制、八进制、十进制、十六进制他们之间的转换方式什么怎样的?2进制,用两个阿拉伯数字:0、1;8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;10进制,用十个阿拉伯数字:0到9;16进制就是逢16进1,但我们只有0~9这十个数字,所以我们用A,B,C,D,E,F这五个字母来分别表示10,11,12,13,14,15。
字母不区分大小写。
以下简介各种进制之间的转换方法:一、二进制转换十进制例:二进制“1101100”1101100 ←二进制数6543210 ←排位方法例如二进制换算十进制的算法:1*26 + 1*25 + 0*24 + 1*23 + 1* 22 + 0*21 + 0*20↑ ↑说明:2代表进制,后面的数是次方(从右往左数,以0开始)=64+32+0+8+4+0+0=108二、二进制换算八进制例:二进制的“10110111011”换八进制时,从右到左,三位一组,不够补0,即成了:010 110 111 011然后每组中的3个数分别对应4、2、1的状态,然后将为状态为1的相加,如:010 = 2110 = 4+2 = 6111 = 4+2+1 = 7011 = 2+1 = 3结果为:2673三、二进制转换十六进制十六进制换二进制的方法也类似,只要每组4位,分别对应8、4、2、1就行了,如分解为:0101 1011 1011运算为:0101 = 4+1 = 51011 = 8+2+1 = 11(由于10为A,所以11即B)1011 = 8+2+1 = 11(由于10为A,所以11即B)结果为:5BB四、二进制数转换为十进制数二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……所以,设有一个二进制数:0110 0100,转换为10进制为:计算:0 * 20 + 0 * 21 + 1 * 22 + 0 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100五、八进制数转换为十进制数八进制就是逢8进1。
计算机基础——进制与进制的转换进制是计量系统中用来表示数字的一种方法,主要包括十进制、二进制、八进制和十六进制。
在计算机科学中,不同进制的转换是基础中的基础,对于理解计算机内部的数据表示方式以及进行编程、网络通信等方面都具有重要作用。
本文将详细介绍不同进制的表示方法和转换方式。
一、进制的定义和表示1. 十进制(Decimal)十进制是我们平时最常用的进制,使用0-9这10个数字来表示数值。
每位的权重是10的n次方,从右到左依次是10的0次方、10的1次方、10的2次方,依此类推。
例如,数值256在十进制中表示为2*10^2+5*10^1+6*10^0=200+50+6=2562. 二进制(Binary)二进制是计算机内部最基本的进制,只使用0和1这两个数字来表示数值。
每位的权重是2的n次方,从右到左依次是2的0次方、2的1次方、2的2次方,依此类推。
例如,数值101在二进制中表示为1*2^2+0*2^1+1*2^0=4+0+1=53. 八进制(Octal)八进制使用0-7这8个数字来表示数值。
每位的权重是8的n次方,从右到左依次是8的0次方、8的1次方、8的2次方,依此类推。
例如,数值73在八进制中表示为7*8^1+3*8^0=56+3=614. 十六进制(Hexadecimal)十六进制使用0-9和A-F这16个数字来表示数值,其中A表示10,B表示11,以此类推。
每位的权重是16的n次方,从右到左依次是16的0次方、16的1次方、16的2次方,依此类推。
例如,数值3F在十六进制中表示为3*16^1+F*16^0=48+15=63二、进制之间的转换十进制到二进制的转换原理是将十进制数不断除以2,直到商为0,然后将每次的余数倒序排列。
例如,将十进制数19转换为二进制:19/2=9余19/2=4余14/2=2余02/2=1余01/2=0余1二进制到十进制的转换原理是将二进制数的每位与对应的权重相乘,然后将乘积相加。
重要的2、8、10、16进制互相转换方法重要的2、8、10、16进制互转换方法最近在研究C语言,因为要用到各进制间转换,所以收集了一些资料…这是一节“前不着村后不着店”的课。
不同进制之间的转换纯粹是数学上的计算。
不过,你不必担心会有么复杂,无非是乘或除的计算。
生活中其实很多地方的计数方法都多少有点不同进制的影子。
比如我们最常用的10进制,其实起源于人有10个指头。
如果我们的祖先始终没有摆脱手脚不分的境况,我想我们现在一定是在使用20进制。
至于二进制……没有袜子称为0只袜子,有一只袜子称为1只袜子,但若有两袜子,则我们常说的是:1双袜子。
生活中还有:七进制,比如星期。
十六进制,比如小时或“一打”,六十进制,比如分钟或角度……我们找到问号字符(?)的ASCII值是63,那么我们可以把它转换为八进值:77,然后用‘\77′来表示’?'。
由于是八进制,所以本应写成‘\077′,但因为C,C++规定不允许使用斜杠加10进制数来表示字符,所以这里的0可以不写。
事实上我们很少在实际编程中非要用转义符加八进制数来表示一个字符,所以,6.2.4小节的内容,大家仅仅了解就行。
6.2.5 十六进制数转换成十进制数2进制,用两个阿拉伯数字:0、1;8进制,用八个阿拉伯数字:0、1、2、3、4、5、6、7;10进制,用十个阿拉伯数字:0到9;16进制,用十六个阿拉伯数字……等等,阿拉伯人或说是印度人,只发明了10个数字啊?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进制呢?用竖式计算: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(别忘了,在上面的计算中,A表示10,而F表示15)现在可以看出,所有进制换算成10进制,关键在于各自的权值不同。
二进制、八进制、十六进制6.1 为什么需要八进制和十六进制?6.2 二、八、十六进制数转换到十进制数6.2.1 二进制数转换为十进制数6.2.2 八进制数转换为十进制数6.2.3 八进制数的表达方法6.2.4 八进制数在转义符中的使用6.2.5 十六进制数转换成十进制数6.2.6 十六进制数的表达方法6.2.7 十六进制数在转义符中的使用6.3 十进制数转换到二、八、十六进制数6.3.1 10进制数转换为2进制数6.3.2 10进制数转换为8、16进制数6.4 二、十六进制数互相转换6.5 原码、反码、补码6.6 通过调试查看变量的值6.7 本章小结这是一节“前不着村后不着店”的课。
不同进制之间的转换纯粹是数学上的计算。
不过,你不必担心会有么复杂,无非是乘或除的计算。
生活中其实很多地方的计数方法都多少有点不同进制的影子。
比如我们最常用的10进制,其实起源于人有10个指头。
如果我们的祖先始终没有摆脱手脚不分的境况,我想我们现在一定是在使用20进制。
至于二进制……没有袜子称为0只袜子,有一只袜子称为1只袜子,但若有两袜子,则我们常说的是:1双袜子。
生活中还有:七进制,比如星期。
十六进制,比如小时或“一打”,六十进制,比如分钟或角度……6.1 为什么需要八进制和十六进制?编程中,我们常用的还是10进制……必竟C/C++是高级语言。
比如:int a = 100,b = 99;不过,由于数据在计算机中的表示,最终以二进制的形式存在,所以有时候使用二进制,可以更直观地解决问题。
但,二进制数太长了。
比如int 类型占用4个字节,32位。
比如100,用int类型的二进制数表达将是:0000 0000 0000 0000 0110 0100面对这么长的数进行思考或操作,没有人会喜欢。
因此,C,C++ 没有提供在代码直接写二进制数的方法。
用16进制或8进制可以解决这个问题。
因为,进制越大,数的表达长度也就越短。
不过,为什么偏偏是16或8进制,而不其它的,诸如9或20进制呢?2、8、16,分别是2的1次方,3次方,4次方。
转换数计算公式转换数计算公式是指将不同进制的数值相互转换的数学公式。
不同进制的数值在计算机科学、数学等领域中经常使用,了解和掌握转换数计算公式对于处理进制转换问题至关重要。
一、十进制转二进制将一个十进制数转换为二进制数,需要使用除2取余的方法。
具体步骤如下:1. 将十进制数不断除以2,直到商为0为止,将每次的余数从下往上排列,就得到了对应的二进制数。
举个例子,将十进制数27转换为二进制数的过程如下:27 ÷ 2 = 13 余 113 ÷ 2 = 6 余 16 ÷ 2 = 3 余 03 ÷ 2 = 1 余 11 ÷2 = 0 余 1将每次的余数从下往上排列,得到的二进制数为11011。
二、二进制转十进制将一个二进制数转换为十进制数,需要使用权重相加的方法。
具体步骤如下:的幂相乘,再将结果相加,就得到了对应的十进制数。
举个例子,将二进制数11011转换为十进制数的过程如下:1 × 2^4 + 1 × 2^3 + 0 × 2^2 + 1 × 2^1 + 1 × 2^0 = 16 + 8 + 0 + 2 + 1 = 27三、十进制转八进制将一个十进制数转换为八进制数,需要使用除8取余的方法。
具体步骤如下:1. 将十进制数不断除以8,直到商为0为止,将每次的余数从下往上排列,就得到了对应的八进制数。
举个例子,将十进制数123转换为八进制数的过程如下:123 ÷ 8 = 15 余 315 ÷ 8 = 1 余 71 ÷ 8 = 0 余 1将每次的余数从下往上排列,得到的八进制数为173。
四、八进制转十进制将一个八进制数转换为十进制数,需要使用权重相加的方法。
具体步骤如下:的幂相乘,再将结果相加,就得到了对应的十进制数。
举个例子,将八进制数173转换为十进制数的过程如下:1 × 8^2 + 7 × 8^1 +3 × 8^0 = 64 + 56 + 3 = 123五、十进制转十六进制将一个十进制数转换为十六进制数,需要使用除16取余的方法,并将余数转换为对应的十六进制字符。
一、十进制与二进制之间的转换(1)十进制转换为二进制,分为整数部分和小数部分①整数部分方法:除2取余法,即每次将整数部分除以2,余数为该位权上的数,而商继续除以2,余数又为上一个位权上的数,这个步骤一直持续下去,直到商为0为止,最后读数时候,从最后一个余数读起,一直到最前面的一个余数。
下面举例:例:将十进制的168转换为二进制得出结果将十进制的168转换为二进制,(10101000)2分析:第一步,将168除以2,商84,余数为0。
第二步,将商84除以2,商42余数为0。
第三步,将商42除以2,商21余数为0。
第四步,将商21除以2,商10余数为1。
第五步,将商10除以2,商5余数为0。
第六步,将商5除以2,商2余数为1。
第七步,将商2除以2,商1余数为0。
第八步,将商1除以2,商0余数为1。
第九步,读数,因为最后一位是经过多次除以2才得到的,因此它是最高位,读数字从最后的余数向前读,即10101000(2)小数部分方法:乘2取整法,即将小数部分乘以2,然后取整数部分,剩下的小数部分继续乘以2,然后取整数部分,剩下的小数部分又乘以2,一直取到小数部分为零为止。
如果永远不能为零,就同十进制数的四舍五入一样,按照要求保留多少位小数时,就根据后面一位是0还是1,取舍,如果是零,舍掉,如果是1,向入一位。
换句话说就是0舍1入。
读数要从前面的整数读到后面的整数,下面举例:例1:将0.125换算为二进制得出结果:将0.125换算为二进制(0.001)2分析:第一步,将0.125乘以2,得0.25,则整数部分为0,小数部分为0.25;第二步, 将小数部分0.25乘以2,得0.5,则整数部分为0,小数部分为0.5;第三步, 将小数部分0.5乘以2,得1.0,则整数部分为1,小数部分为0.0;第四步,读数,从第一位读起,读到最后一位,即为0.001。
例2,将0.45转换为二进制(保留到小数点第四位)大家从上面步骤可以看出,当第五次做乘法时候,得到的结果是0.4,那么小数部分继续乘以2,得0.8,0.8又乘以2的,到1.6这样一直乘下去,最后不可能得到小数部分为零,因此,这个时候只好学习十进制的方法进行四舍五入了,但是二进制只有0和1两个,于是就出现0舍1入。
⼆进制、⼋进制、⼗进制、⼗六进制之间的转换⼆进制是Binary,简写为B⼋进制是Octal,简写为O⼗进制为Decimal,简写为D⼗六进制为Hexadecimal,简写为H⽅法为:⼗进制数除2取余法,即⼗进制数除2,余数为权位上的数,得到的商值继续除2,依此步骤继续向下运算直到商为0为⽌。
读数要倒叙读。
⼩数:乘2取整法,即将⼩数部分乘以2,然后取整数部分,剩下的⼩数部分继续乘以2,然后取整数部分,剩下的⼩数部分⼜乘以2,⼀直取到⼩数部分为零。
如果永远不能为零,就同⼗进制数的四舍五⼊⼀样,按照要求保留多少位⼩数时,就根据后⾯⼀位是0还是1,取舍,如果是零,舍掉,如果是1,向⼊⼀位。
换句话说就是0舍1⼊。
读数要从前⾯的整数读到后⾯的整数,即读数要顺序读。
0.125 转⼆进制第⼀步,将0.125乘以2,得0.25,则整数部分为0,⼩数部分为0.25;第⼆步, 将⼩数部分0.25乘以2,得0.5,则整数部分为0,⼩数部分为0.5;第三步, 将⼩数部分0.5乘以2,得1.0,则整数部分为1,⼩数部分为0.0;第四步,读数,从第⼀位读起,读到最后⼀位,即为0.001。
积整数部分0.125 x 2 = 0.25 00.25 x 2 = 0.5 00.5 x 2 = 1.0 1150.125 转⼆进制10010110.0010.45 转⼆进制(保留到⼩数点第四位)第⼀步,将0.45乘以2,得0.9,则整数部分为0,⼩数部分为0.9;第⼆步, 将⼩数部分0.9乘以2,得1.8,则整数部分为1,⼩数部分为0.8;第三步, 将⼩数部分0.8乘以2,得1.6,则整数部分为1,⼩数部分为0.6;第四步, 将⼩数部分0.6乘以2,得1.2,则整数部分为1,⼩数部分为0.2; 算到这⼀步就可以了,因为只需要保留四位⼩数第五步, 将⼩数部分0.2乘以2,得0.4,则整数部分为0,⼩数部分为0.4;第六步, 将⼩数部分0.4乘以2,得0.8,则整数部分为0,⼩数部分为0.8;后⾯会⼀直循环重复第七步, 将⼩数部分0.8乘以2,得1.6,则整数部分为1,⼩数部分为0.6;。
目录课程设计任务书 (2)1.设计题目 (3)2.设计要求 (3)3.理论知识 (3)3.1进位计数制 (3)3.2进制转换 (4)3.3 ASCII 码 (5)4.程序结构 (6)4.1总体结构 (6)4.2十进制转二进制DECibin (7)4.3二进制转八进制binioct (8)4.4八进制转二进制octbin (9)4.5二进制转十进制binidec (10)5.程序清单 (11)6.运行结果 (15)7.心得体会 (17)本科生课程设计成绩评定表 (18)课程设计任务书学生姓名专业班级:指导教师:徐东平工作单位:计算机科学与技术学院题目: 八进制数和十进制数相互转换初始条件:理论:完成了《汇编语言程序设计》课程,对微机系统结构和80系列指令系统有了较深入的理解,已掌握了汇编语言程序设计的基本方法和技巧。
实践:完成了《汇编语言程序设计》的4个实验,熟悉了汇编语言程序的设计环境并掌握了汇编语言程序的调试方法。
要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)进一步理解和掌握较复杂程序的设计方法,掌握子程序结构的设计和友好用户界面的设计。
具体的设计任务及要求:1)编写八进制和十进制间的转换程序;2)要求在屏幕上输出结果。
3)程序采用子程序结构,结构清晰;4)友好清晰的用户界面,能识别输入错误并控制错误的修改。
在完成设计任务后,按要求撰写课程设计说明书;对课程设计说明书的具体要求请见课程设计指导书。
阅读资料:1)《IBM—PC汇编语言程序设计实验教程》实验2.42)《IBM—PC汇编语言程序设计(第2版)》例6.11时间安排:设计安排一周:周1、周2:完成系统分析及设计。
周3、周4:完成程序调试,和验收。
周5:撰写课程设计报告。
指导教师签名:年月日系主任(或责任教师)签名:年月日八进制数和十进制数相互转换1.设计题目八进制数和十进制数相互转换。
2.设计要求本次课程设计着重于理论设计,同时培养动手能力。
要求运用自己所学知识进行设计实现,体现自己的知识掌握水平,严禁抄袭(发现后抄袭者和被抄袭者一律不及格)。
所作设计需进行论证,一方面是从理论上进行推理验证,另一方面是实验论证。
内容包括:设计题目;原始条件及参数;要求完成的主要任务(如:设计方案的选择与确定、设计计算、程序编制、说明书撰写等具体要求);时间安排等。
3.理论知识3.1进位计数制(1)十进制数( Decimal )十进制数是人们十分熟悉的计数体制。
它用 0 、 1 、 2 、 3 、 4 、 5 、6 、 7 、 8 、 9 十个数字符号,按照一定规律排列起来表示数值的大小。
每一个位置(数位)只能出现十个数字符号 0 ~ 9 中的其中一个。
通常把这些符号的个数称为基数,十进制数的基数为 10 ;同一个数字符号在不同的位置代表的数值是不同的。
十进制基于位进制和十进位两条原则,即所有的数字都用10个基本的符号表示,满十进一,同时同一个符号在不同位置上所表示的数值不同,符号的位置非常重要。
基本符号是0到9十个数字。
要表示这十个数的10倍,就将这些数字右移一位,用0补上空位,即10,20,30,...,90;要表示这十个数的10倍,就继续左移数字的位置,即100,200,300,...。
要表示一个数的1/10,就右移这个数的位置,需要时就0补上空位:1/10位0.1,1/100为0.01,1/1000为0.001。
(2)二进制数( Binary )二进制是计算技术中广泛采用的一种数制。
二进制数据是用0和1两个数码来表示的数。
它的基数为2,进位规则是“逢二进一”,借位规则是“借一当二”,由18世纪德国数理哲学大师莱布尼兹发现。
当前的计算机系统使用的基本上是二进制系统。
(3)八进制数( Octal )在八进制中,基数为 8 ,它有 0 、 1 、 2 、 3 、 4 、 5 、 6 、 7 八个数字符号,八进制的基本运算规则是“逢八进一”,各数位的权是 8 的幂。
3.2进制转换(1)十进制数与二进制数互换a.十进制数转换成二进制数整数部分的转换——除2取余法。
整数部分的转换采用“除2取余法”。
即用2多次除被转换的十进制数,直至商为0,每次相除所得余数,按照第一次除2所得余数是二进制数的最低位,最后一次相除所得余数是最高位,排列起来,便是对应的二进制数。
小数部分的转换——乘2取整法。
小数部分的转换采用“ 乘2取整法” 。
即用2多次乘被转换的十进制数的小数部分,每次相乘后,所得乘积的整数部分变为对应的二进制数。
第一次乘积所得整数部分就是二进制数小数部分的最高位,其次为次高位,最后一次是最低位。
b.二进制数转换成十进制数二进制转十进制从最后一位开始算,依次列为第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)二进制数与八进制数互换a.二进制数转换成八进制数因为三位二进制数正好表示 0 ~ 7 八个数字,所以一个二进制数要转换成八进制数时,以小数点为界分别向左向右开始,每三位分为一组,一组一组地转换成对应的八进制数字。
若最后不足三位时,整数部分在最高位前面加 0 补足三位再转换;小数部分在最低位之后加 0 补足三位再转换。
然后按原来的顺序排列就得到八进制数了。
八进制与二进制对照表八进制0 1 2 3 4 5 6 7二进制000 001 010 011 100 101 110 111b.八进制数转换成二进制数一个八进制数要转换成二进制数时,以小数点为界分别向左向右开始,每一位八进制数字换成对应的三位二进制数即可。
3.3 ASCII 码由于计算机只能直接接受、存储和处理二进制数。
对于数值信息可以采用二进制数码表示,对于非数值信息可以采用二进制代码编码表示。
编码是指用少量基本符号根据一定规则组合起来以表示大量复杂多样的信息。
一般所来,需要用二进制代码表示哪些文字、符号取决于我们要求计算机能够“识别”哪些文字、符号。
为了能将文字、符号也存储在计算机里,必须将文字、符号按照规定的编码转换成二进制数代码。
目前计算机中用得最广泛的字符集及其编码,是由美国国家标准局(ANSI)制定的ASCII码(American Standard Code for Information Interchange,美国标准信息交换码),它已被国际标准化组织(ISO)定为国际标准,称为ISO 646标准。
适用于所有拉丁文字字母,ASCII码有7位码和8位码两种形式。
因为1位二进制数可以表示(2=)2种状态:0、1;而2位二进制数可以表示(2=)4种状态:00、01、10、11;依次类推,7位二进制数可以表示(2=)128种状态,每种状态都唯一地编为一个7位的二进制码,对应一个字符(或控制码),这些码可以排列成一个十进制序号0~127。
所以,7位ASCII码是用七位二进制数进行编码的,可以表示128个字符。
第0~32号及第127号(共34个)是控制字符或通讯专用字符,如控制符:LF(换行)、CR(回车)、FF(换页)、DEL(删除)、BS(退格)、BEL(振铃)等;通讯专用字符:SOH(文头)、EOT(文尾)、ACK(确认)等;第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母,97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。
4.程序结构4.1总体结构开始选择转换方式调用octbin 调用crlf调用binidec 调用crlf调用DECibin调用crlf调用binioct调用crlf结束八进制转十进制十进制转八进制开始BX清零输入数值<0或>9d 转ASCII交换AX、BXAX乘10交换AX、BX加上AX结束开始BX左移2位把最右面的2位转为ASCII码显示一个字符循环计数值置为2BX循环左移3位把最右面的3位转为ASCII码显示一个字符循环计数值=0?NY结束开始BX 清零输入十进制数判定范围移位数字为3 左移3位AH 清零添加新二进制位结束跳转输入<0重新输入<8继续执行开始CX置10000d 调用子程序CX置1000d 调用子程序CX置100d 调用子程序CX置10d调用子程序CX置1d调用子程序结束开始把二进制数转入AXDX清零除法运算余数移入BX商移入DL商转为ASCII显示商结束子程序DEC_div5.程序清单;DECIOCT;十进制与八进制相互转换;首先选择算法,1为八进制转十进制,2为十进制转八进制;***************************DECioct SEGMENTASSUME CS:DECioct;主程序部分。
main PROC FARstart: MOV DL,3ah ;显示提示附MOV AH,2INT 21hMOV AH,1 ;输入选择数字INT 21hCMP AL,32h ;数字为1时,执行八进制转十进制 JE REPEat2 ;数字为2时,执行十进制转八进制REPEat1: CALL octbin ;键盘输入八进制数转为二进制CALL crlf ;回车并换行CALL binidec ;二进制转十进制CALL crlf ;回车并换行JMP REPEat1 ;重复执行REPEat2: CALL DECibin ;键盘输入十进制数转为二进制CALL crlf ;回车并换行CALL binioct ;二进制转八进制CALL crlf ;回车并换行JMP REPEat2 ;重复执行main ENDP;-----------------------------;十进制转二进制DECibin PROC NEARMOV BX,0 ;将BX清零NEwchar2:MOV AH,1INT 21h ;21号中断输入SUB AL,30h ;ASCII转二进制JL exit2 ;<0则跳转CMP AL,9d ;判断是否>9JG exit2 ;如果大于则不是十进制数 CBW ;字节转为字XCHG AX,BX ;交换寄存器MOV CX,10d ;把10放如CXMUL CX ;AX扩大10倍XCHG AX,BX ;交换寄存器ADD BX,AX ;原数的10倍加上输入数 JMP NEwchar2 ;跳转输入exit2:RETDECibin ENDP;---------------------------------------;二进制转八进制binioct PROC NEARMOV CL,2 ;移位数字2ROL BL,CL ;循环左移2位MOV AL,BL ;把输入的数送入ALAND AL,03h ;将高六位屏蔽ADD AL,30h ;转换为ASCIIMOV DL,AL ;输出ALMOV AH,2INT 21hMOV CH,2 ;剩余显示2位rotate2:MOV CL,3 ;移位数字3ROL BL,CL ;循环左移3位MOV AL,BL ;把输入的数送入ALAND AL,07h ;将高五位屏蔽ADD AL,30h ;转换为ASCIIMOV DL,AL ;输出ALMOV AH,2INT 21hDEC CH ;递减CHJNZ rotate2 ;CH不为0则跳转RETbinioct ENDP;---------------------------------------;八进制转二进制octbin PROC NEARMOV BX,0 ;BX清零NEwchar1:MOV AH,1 ;输入数字INT 21hSUB AL,30h ;转换为二进制数JL exit1CMP AL,8d ;如果<8则跳转JL ADD_to1CMP AL,10hJGE exit1ADD_to1:MOV CL,3 ;移位数字3SHL BX,CL ;左移3位MOV AH,0 ;AH清0ADD BX,AX ;把新位移入数字JMP NEwchar1 ;跳转继续输入exit1:REToctbin ENDP;--------------------------------------;二进制转十进制binidec PROC NEARMOV CX,10000d ;除数为10000CALL DEC_divMOV CX,1000d ;除数为1000CALL DEC_divMOV CX,100d ;除数为100CALL DEC_divMOV CX,10d ;除数为10CALL DEC_divMOV CX,1d ;除数为1CALL DEC_divRET;---------------------------------------;子程序DEC_div PROC NEARMOV AX,BX ;把二进制数移入AX MOV DX,0 ;DX高八位清零DIV CX ;除数CXMOV BX,DX ;余数移入BXMOV DL,AL ;商移入DLADD DL,30h ;转换为ASCII MOV AH,2 ;输出十进制数位 INT 21hRETDEC_div ENDP;---------------------------------------binidec ENDP;---------------------------------------;回车和换行。