搜档网
当前位置:搜档网 › 二进制数和十六进制数之间转换

二进制数和十六进制数之间转换

二进制数和十六进制数之间转换
二进制数和十六进制数之间转换

北华航天工业学院

课程设计报告(论文)

设计课题:二进制数和十六进制数之间转换专业班级: 3

学生姓名:

指导教师:

设计时间:

北华航天工业学院电子工程系

微型计算机原理与接口技术课程设计任务书

姓名:专业:电子信息工程班级:

指导教师:职称:讲师

课程设计题目:

代码转换(二进制数和十六进制数之间转换)

已知技术参数和设计要求:

1.编写一个程序,要求从键盘上连续输入二进制或十六进制字符,然后在屏幕上自动显示出二---十六进制之间转换的结果。

2.利用ROL和RCL循环指令以及十六进制数所对应的ASCII码比其本身大30H(0-9)或37H(A-Z)的关系, 将输入数转换成对应的ASCII 码,再调用DOS系统功能调用中的2号(显示字符)功能,将转换后的字符显示出来。

所需仪器设备:

计算机、MASM软件

成果验收形式:

程序说明,计算机演示,设计报告

参考文献:

微机原理与接口技术

8086实验指导书

时间安排

十六周:程序编辑,上机运行结果

十七周:验收成果

指导教师:教研室主任:

年月日

内容摘要

在计算机系统中有多种数制和编码,常用的数制有二进制、八进制以及十六进制,常用的代码有BCD码、ASCII码和七段显示码等。这些数制和编码根据其作用的不同,在存储形式上也有差异。在实际应用中,它们也因使用的要求不同而有所差异。在配备操作系统管理程序的计算机中,有些代码转换程序已在系统管理软件中编好。还有些代码转换需要根据使用要求通过编程完成。因此,代码转换是非数据处理中最常见的情况。

索引关键词:代码转换二进制十六进制DOS系统

目录

一概述 (4)

1-1设计目的 (4)

1-2设计要求 (4)

二方案设计与论证 (4)

2-1二进制向十六进制的转换 (4)

2-2十六进制向二进制的转换 (4)

三程序分析 (5)

四程序流图 (7)

五运行结果 (10)

六心得体会 (10)

七参考文献 (10)

一、概述

1.设计目的

(1)增进对汇编语言的认识,加强汇编语言编辑能力;

(2)掌握汇编语言的中断调用的功能的应用,可以用汇编语言调用各种中断调用功能,并由此实现了对硬件的控制;

(3)了解和掌握汇编语言程序的设计过程,方法和实现,为以后的学习打下良好的基础;

(4)培养分析解决问题的能力;

(5)提高科技论文写作能力。

2设计要求

按屏幕提示要求输入,从屏幕上获得正确结果。

二、方案设计与论证

在计算机系统中有多种数制和编码,常用的数制有二进制、八进制以及十六进制,常用的代码有BCD码、ASCll码和七段显示码等。这些数制和编码根据其作用的不同,在存储形式上也有差异。在实际应用中,它们也因使用的要求不同而有所差异。在配备操作系统管理程序的计算机中,有些代码转换程序已在系统管理软件中编好。还有些代码转换需要根据使用要求通过编程完成。因此,代码转换是非数据处理中最常见的情况。

模块1实现二进制数向十六进制数的转换,用循环左移指令ROL每次移动4位,取出移到最低的4位,利用十六进制数所对应的ASCll码比其本身大30H(0-9)或37H(A-Z)的关系,将低4位转换成对应的ASCll码,再调用DOS系统功能调用中的2号(显示字符)功能,将转换后的字符显示出来。如此循环4次。

模块2实现十六进制数向二进制数的转换,完成此功能需要两个步骤,第一步是十六进制数的输入和对应二进制数的转换。方法是利用DOS系统功能调用中的1号输入字符的功能,接收键盘输入的十六进制数,将其转换成对应的二进制数(若是0-9之间的数,直接屏蔽高4位;若是A-F之间的数,在屏蔽高4位后还要加9)。BX中存放的是二进制数的结果,利用算术左移指令每次将BX 左移4位,然后与下一次转换后的数相加。如此循环4次,得到对应的二进制数。第二步是显示转换后的二进制数,方法是利用ROL和RCL指令,从最高位起循环取出每位二进制数,将其转换成对应的ASCll码,调用DOS系统功能调用中的2号(显示字符)功能显示。

三程序分析

DATAS SEGMENT

BUF DB 'PLIEASE ENTER CHARACTERS',0DH,0AH,'$'

DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS

START: MOV AH,1

INT 21H

CMP AL,5

JB NEXT2

NEXT: MOV AX,DATAS ;十六进制转为二进制

MOV DS,AX;

LEA DX,BUF

MOV AH,9

INT 21H ;9号功能调用,键盘显示

MOV CL,4

MOV CH,4

SUB BX,BX ;BX清零

L1: MOV AH,1

INT 21H

MOV AH,0

CMP AL,'A' ;AL与A比较

JB L2 ;低于A则转移到L2子程序

AND AL,0FH ;AL和0F按位与

ADD AL,9 ;AL和9相加,结果送回AL JMP L3

L2: AND AL,0FH

L3: SHL BX,CL ;将BX逻辑左移4次

ADD BX,AX

DEC CH;将CH-1

JNZ L1

MOV CX,10H

L4: ROL BX,1 ;BX中的值左移1位

MOV DX,BX

AND DX,1H

OR DL,30H ;DL和30H按位或

CMP DL,3AH

JB DDD

ADD DL,07H

DDD: MOV AH,2 ;2号功能调用,键盘显示

INT 21H

LOOP L4 ;L4循环

JMP OOO

NEXT2: MOV AX,DATAS ;二进制转为十六进制

MOV DS,AX

LEA DX,BUF

MOV AH,9

INT 21H

MOV CX,10H

SUB AX,AX ;AX清零

SUB DX,DX

L6: MOV AH,1

INT 21H

AND AX,0FH

SHL DX,1

ADD DL,AL

LOOP L6

MOV CH,4

MOV CL,4

LLP: ROL DX,CL

PUSH DX ;入栈

AND DX,0FH

OR DL,30H

CMP DL,3AH

JB DDT

ADD DL,07H

DDT: MOV AH,2

INT 21H

POP DX ;出栈

DEC CH

JNZ LLP

OOO: MOV AH,4CH

INT 21H ;返回DOS CODES ENDS

END START

四、程序流图

开始

判断输入否大于5

键盘输入字母

结束

调用NEXT2子程序

调用NEXT 子程序

AL 与OFH 按位求与结果送AL

BL 左移AL 位,最高位移入CF DX 与BX 求和结果送到DX, CH

判断CH 是否等于0

CX

10

BX 左移循环移位 、,DX

BX

CL 4,CH 4, AX,BX 清零

AL 与OFH 按位求与结果送AL 之后加9

DX 与1H 按位求与,DL 与30H 按位求

AH

判断DL 是否大于否

键盘输入一个数,AH 0

判断AL 是否大于’A ’ 是

DL 加07H

调用2号功能显示,CX 减1

判断CX 是否等于0

五、运行结果

六、心得体会

通过这次课程设计,我对汇编语言有了更进一步的认识,加强了我用汇编语言编程的能力,经过努力,我完成了简单的课程设计。

在开始之前,首先复习了一下相关知识,尤其是汇编语言.定下题目,仔细思考了编程思路及所需要的程序流程,并上网查阅了类似资料,经历了一周多的时间,最终完成了题目。

这次课设最大的收获就是巩固了所学的知识,并认识到自己的不足之处,在理论学习和运用方面还存在很到不足,以后再学习理论的基础上不断进行实践操作来巩固理论,这是我这次课程设计的最大收获,同时培养了对微机原理这门课的兴趣。

七、参考文献

微型计算机原理与接口技术张荣标编著机械工业出版社

电子工程系微机原理与接口技术课程设计成绩评定表专业:班级:学号:姓名:

课题名称代码转换(二进制十六进制数之间转换)

设计任务与要求已知技术参数和设计要求:

1编写一个程序,要求从键盘上连续输入二进制或十六进制字符,然后在屏幕上自动显示出二---十六进制之间转换的结果。

2. 利用ROL和RCL循环指令以及十六进制数所对应的ASCII码比其

本身大30H(0-9)或37H(A-Z)的关系, 将输入数转换成对应的ASCII码,再调用DOS系统功能调用中的2号(显示字符)功能,将转换后的字符显示出来。

建议成绩:指导教师:

评定成绩:课程负责人:

年月日

二进制、十进制和十六进制及其相互转换的公式

计算机内部是以二进制形式表示数据和进行运算的;计算机内的地址等信号常用十六进制来表示,而人们日常又习惯用十进制来表示数据。这样要表示一个数据就要选择一个适当的数字符号来规定其组合规律,也就是要确定所选用的进位计数制。各种进位制都有一个基本特征数,称为进位制的“基数”。基数表示了进位制所具有的数字符号的个数及进位的规律。下面就以常用的十进制、二进制、八进制和十六进制为例,分别进行叙述。 一.常用的三种计数制 1.十进制(Decimal) 十进制的基数是10,它有10个不同的数字符号,即0、1、2、3、…、9。它的计数规律是“逢十进一”或“借一当十”。处在不同位置的数字符号具有不同的意义,或者说有着不同的“权”。所谓的“权”就是每一位对其基数具有不同的倍数。例如,一个十进制数为 123.45=1×102十2×101十3×100十4×10-1十5×10-2 等号左边为并列表示法.等号右边为多项式表示法,显然这两种表示法表示的数是等价的。 在右边多项式表示法中,1、2、3、4、5被称为系数项,而102、101、100、10-1、10-2等被称为该位的“权”。 一般来说,任何一个十进制数”都可以采用并列表不法表不如下: N10=dn-1d n-2…d1d 0. d-1d-2…d-m 其中,下标n表示整数部分的位数,下标m表示小数部分的位数,d是0~9中的某一个数,即di∈(0,1,…,9)。同样,任意一个十进制数N都可以用多项式表示法表示如下: N10=dn-1×10n-1十…十d1×101十d 0×100十d-1×10-1十…十 d-m×10-m 其中,m、n为正整数,di表示第i位的系数,10i称为该位的权。所以某一位数的大小是由各系数项和其权值的乘积所决定的。 2.二进制(Binary) 二进制的基数是2,它只有两个数字符号,即0和1。计算规律是“逢二进一”或“借一当二”。例如:(101.01)2=1×23十1×22十0×21十1×20十0×2-1十1×2-2 任何一个二进制数N都可以用其多项式来表示: N2=dn-1×2n-1十dn-2×2n-2十…十d1×21十d 0×20十d-1×2-1十d-2×2-2十…十d-m×2-m 式中任何一位数值的大小都可以用该位的系数项di和权值2i的积来确定。 3.十六进制(Hexadecimal) 十六进制的基数为16,它有16个数字符号、即0~9、A~F。其中A、B、C、D、E、F分别代表十进制数的10、11、12、13、14、15。各位之间“逢十六进一”或者“借一当十六”。各位的权值为16i。例如:(2C7.1F)16=2×162十12×161十7×160十1×16-1十15×16-2 二.3种计数制之间的相互转换 对于同一个数,可以采用不同的计数制来表示,其形式也不同。如: (11)10=(1011)2=(B)16 1.R进制转换成十进制的方法 具体的方法是先将其并列形式的数写成其多项式表示形式,然后,经计算后就可得到其十进制的结果。这种方法披称为按权展开法。对于一个任意的R进制数N都可以写成如下形式: N=dn-1 dn-2…d1 d0d -1d-2…d-m =dn-1×Rn-1十…十d1×R1十d 0×R0十d-1×R-1十…十d-m×R-m 其中,R为进位基数,Ri是对应位的权值,di为系数项,特此式求和计算之后,即可以完成R进制数对十进制数的转换。 例如,写出(1101.01)2、(10D)16的十进制数。 (1101.01)2=1×23十1×22十0×21十1×20十0×2-1十0×2-2,

高中信息技术基础进制转换二进制十进制十六进制转换转化

2进制数转换为10进制 (110)2转化为十进制 10进制整理转换成2进制 于是,结果是余数的倒排列,即为: (37)10=(a5a4a3a2a1a0)2=(100101)2 16进制转化成2进制、2进制转化成16进制 (二进制和十六进制的互相转换比较重要。不过这二者的转换却不用计算,每个C,C++程序员都能做到看见二进制数,直接就能转换为十六进制数,反之亦然。) 16进制转化成2进制:每一位十六进制数对应二进制的四位,逐位展开。 二进制数转为十六进制:将二进制数转换成十六进制数是将二进数的整数部分从右向左每四位一组,每一组为一位十六进制整数,不足四位时,在前面补0 (FB)16=(1111 ,1011)2 互转

2进制与16进制的关系: 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 B C D E F 可以用四位数的二进制数来代表一个16进制,如3A16 转为二进制为: 3为0011,A 为1010,合并起来为00111010。可以将最左边的0去掉得1110102 右要将二进制转为16进制,只需将二进制的位数由右向左每四位一个单位分隔,将各单位对照出16进制的值即可。 16进制数转换为10进制数 假设有一个十六进数 2AF5, 那么如何换算成10进制呢? 用竖式计算: 2AF5换算成10进制: 直接计算就是: 5 * 16^0 + F * 16^1 + A * 16^2 + 2 * 16^3 = 10997 (别忘了,在上面的计算中,A表示10,而F表示15) 假设有人问你,十进数 1234 为什么是一千二百三十四? 你尽可以给他这么一个算式: 1234 = 1 * 10^3 + 2 * 10^2 + 3 * 10^1 + 4 * 10^0 如十进制数2039 它可以表示为:2*10^3+0*10^2+3*10^1+9*10^0

二进制十进制八进制十六进制转换练习题

数制及相互转换 一、单选题 1、下列数据中数值最小的是 A、01110000B B、249D C、125Q D、AAH 2、下列数据中数值最大的是 A、3FH B、64D C、77Q D、111110B 3、下列数据中数值最大的是 A、100H B、100D C、100Q D、100B 4、十进制数24转换成二进制数是 A、11100 B、11010 C、11000 D、10100 5、下列数据中数值最小的是 A、11110000(二进制) B、249(十进制) C、274(八进制) D、FA(十六进制) 6、下列数据中数值最大的是 A、11101101(二进制) B、235(十进制) C、351(八进制) D、EE(十六进制) 7、下列各数中最大的是 A、11010110B B、D7 H C、214D D、325Q 8、与二进制数100101等值的十进制数是 A、34 B、35 C、36 D、37 9、与十进制数256等值的二进制数是 A、1000000 B、10000000 C、100000000 D、1000000000 10、与十六进制数ACE等值的十进制数是 A、2766 B、2765 C、2764 D、2763 11、十六进制数111与八进制数111之和,用八进制数表示为 A、310 B、1222 C、1000 D、532 12、按某种进制运算2 × 4=12,那么4 × 5为 A、20 B、32 C、24 D、12 13、若216是某种数制的一个数,它的值与十六进制数8E相等,则该数是()进制数。 A、六 B、八 C、九 D、十 14、下列各数中,属于合法的五进制数的是 A、216 B、123 C、354 D、189 15、下列无符号十进制中,能用8位二进制表示的是 A、257 B、288 C、256 D、255 16、无符号二进制数后加上一个0,形成的数是原来的几倍? A、1 B、2 C、1/2 D、4 17、下列数据中数值最大的是 A、(10000)2 B、(17)8 C、(17)10 D、(10)16 18、某学校有1500名学生,若用二进制来编学号,需要多少位来表示。 A、10 B、11 C、12 D、13

二进制转换十六进制

二进制转换十六进制 在Java中字节与十六进制的相互转换主要思想有两点: 1、二进制字节转十六进制时,将字节高位与0xF0做"&"操作,然后再左移4位,得到字节高位的十六进制A;将字节低位与0x0F做"&"操作,得到低位的十六进制B,将两个十六进制数拼装到一块AB就是该字节的十六进制表示。 2、十六进制转二进制字节时,将十六进制字符对应的十进制数字右移动4为,得到字节高位A;将字节低位的十六进制字符对应的十进制数字B与A做"|"运算,即可得到十六进制的二进制字节表示 我测试的Java代码如下: Java代码 public class Test01 { private static String hexStr = "0123456789ABCDEF"; private static String[] binaryArray = {"0000","0001","0010","0011", "0100","0101","0110","0111", "1000","1001","1010","1011", "1100","1101","1110","1111"}; public static void main(String[] args) { String str = "二进制与十六进制互转测试"; System.out.println("源字符串:\n"+str); String hexString = BinaryToHexString(str.getBytes()); System.out.println("转换为十六进制:\n"+hexString); System.out.println("转换为二进制:\n"+bytes2BinaryStr(str.getBytes())); byte [] bArray = HexStringToBinary(hexString); System.out.println("将str的十六进制文件转换为二进制再转为String:\n"+new String(bArray)); } /** * * @paramstr * @return 转换为二进制字符串 */ public static String bytes2BinaryStr(byte[] bArray){ String outStr = ""; intpos = 0;

进制转换计算

二进制、八进制、十进制与十六进制 一、进制的概念 在计算机语言中常用的进制有二进制、八进制、十进制和十六进制,十进制是最主要的表达形式。 基数:基数是指一种进制中组成的基本数字,也就是不能再进行拆分的数字。二进制是0和1;八进制是0-7;十进制是0-9;十六进制是0-9+A-F(大小写均可)。也可以这样简单记忆,假设是n进制的话,基数就是【0,n-1】的数字,基数的个数和进制值相同,二进制有两个基数,十进制有十个基数,依次类推。 运算规则:运算规则就是进位或错位规则。例如对于二进制来说,该规则是“满二进一,借一当二”;对于十进制来说,该规则是“满十进一,借一当十”。其他进制也是这样。 三、二进制转化成其他进制 1. 二进制(Binary)——>八进制(Octal) 例子:将二进制数(10010)2转化成八进制数。(10010)2=(010 010)2=(2 2)8=(22)8 将二进制数(0.1010)2转化为八进制数。(0.10101)2=(0. 101 010)2=(0. 5 2)8=(0.52)8 诀窍:因为每三位二进制数对应一位八进制数,所以,以小数点为界,整数位则将二进制数从右向左每3位一隔开,不足3位的在左边用0填补即可;小数位则将二进制数从左向右每3位一隔开,不足3位的在右边用0填补即可。 2. 二进制(Binary)——>十进制(Decimal) 例子:将二进制数(10010)2转化成十进制数。 (10010)2=(1x24+0x23+0x22+1x21+0x20)10=(16+0+0+2+0)10=(18) 10将二进制数(0.10101)2转化为十进制数。 (0.10101)2=(0+1x2-1+0x2-2+1x2-3+0x2-4+1x2-5)10=(0+0.5+0.25+0.125+0.0625+0.03125)10=(0.96875)10 诀窍:以小数点为界,整数位从最后一位(从右向左)开始算,依次列为第0、1、2、3………n,然后将第n位的数(0或1)乘以2的n-1次方,然后相加即可得到整数位的十进制数;小数位则从左向右开始算,依次列为第1、2、3……..n,然后将第n位的数(0或1)乘以2的-n次方,然后相加即可得到小数位的十进制数(按权相加法)。 3. 二进制(Binary)——>十六进制(Hex) 例子:将二进制数(10010)2转化成十六进制数。(10010)2=(0001 0010)2=(1 2)16=(12) 16将二进制数(0.1010)2转化为十六进制数。 (0.10101)2=(0. 1010 1000)2=(0. A 8)16=(0.A8)16 诀窍:因为每四位二进制数对应一位十六进制数,所以,以小数点为界,整数位则将二进制数从右向左每4位一隔开,不足4位的在左边用0填补即可;小数位则将二进制数从左向右每4位一隔开,不足4位的在右边用0填补即可。 四、八进制转化成其他进制 1. 八进制(Octal)——>二进制(Binary) 例子1:将八进制数(751)8转换成二进制数。 (751)8=(7 5 1)8=(111 101 001)2=(111101001)2 例子2:将八进制数(0.16)8转换成二进制数。 (0.16)8=(0. 1 6)8=(0. 001 110)2=(0.00111)2 诀窍:八进制转换成二进制与二进制转换成八进制相反。 2. 八进制(Octal)——>十进制(Decimal) 例子1:将八进制数(751)8转换成十进制数。 (751)8=(7x82+5x81+1x80)10=(448+40+1)10=(489)10 例子2:将八进制数(0.16)8转换成十进制数。

十进制数与十六进制数的转换方法

若十进制数23785转为十六进制,则用23785/16=1486余9,1486/16=92余14, 92/16=5余12, 5/16=0余5,十六进制中,10对应为a、11对应为b、。。。。。。、15对应为f,再将余数倒写为5ce9,则十进制23785=十六进制5ce9 十六进制数的第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 二进制的1101转化成十进制 1101(2)=1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8=13 转化成十进制要从右到左用二进制的每个数去乘以2的相应次方不过次方要从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 1/2 = 0 余1 故二进制为100101110 二进制转八进制 在把二进制数转换为八进制表示形式时,对每三位二进制位进行分组,应该从小数点所在位置分别向左向右划分,若整数部分倍数不是3的倍数,可以在最高位前面补若干个0;对小数部分,当其位数不是的倍数时,在最低位后补若干个0.然后从左到右把每组的八进制码依次写出,即得转换结果. 你算一下就知道了啊比如110=1*2^2+1*2^1+0*2^0=6 比如:1001110分组001 001 110 001=0*2^2+0*2^1+1*2^0=1 001=0*2^2+0*2^1+1*2^0=1 110=1*2^2+1*2^1+0*2^0=6 结果为116

2.8.16进制转换

二进制数转换为十进制数 二进制数第0位的权值是2的0次方,第1位的权值是2的1次方……所 以,设有一个二进制数:0110 0100,转换为10进制为:下面是竖式:0110 0100 换算成十进制 第0位 0 * 20 = 0,第1位 0 * 21 = 0,第2位 1 * 22 = 4,第3位 0 * 23 = 0,第4位 0 * 24 = 0,第5位 1 * 25 = 32,第6位 1 * 26 = 64,第7位 0 * 27 = 0 + --------------------------- 100,用横式计算为:0 * 20 + 0 * 21 + 1 * 22 + 1 * 23 + 0 * 24 + 1 * 25 + 1 * 26 + 0 * 27 = 100,0乘以多少都 是0,所以我们也可以直接跳过值为0的位:1 * 22 + 1 * 23 + 1 * 25 + 1 * 26 = 100 八进制数转换为十进制数.八进制就是逢8进1。八进制数采用 0~7这八数 来表达一个数。八进制数第0位的权值为8的0次方,第1位权值为8的1 次方,第2位权值为8的2次方……所以,设有一个八进制数:1507,转换 为十进制为:用竖式表示:1507换算成十进制。第0位 7 * 80 = 7,第1位 0 * 81 = 0 ,第2位 5 * 82 = 320 ,第3位 1 * 83 = 512 + -------------------------- 839,同样,我们也可以用横式直接计算:7 * 80 + 0 * 81 + 5 * 82 + 1 * 83 = 839.结果是,八进制数 1507 转换成十进制数为 839. 十六进制数转换成十进制数,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次方……所以,

十六进制数转换为二进制数程序

十六进制数转换为二进制数程序 程序: CRLF MACRO ;宏定义 PUSH AX ;把AX压入堆栈 PUSH DX ;把DX压入堆栈 MOV AH, 02H ;显示回车 MOV DL, 0DH INT 21H MOV AH, 02H ;显示换行 MOV DL, 0AH INT 21H POP DX ;弹出DX POP AX ;弹出AX ENDM DATA SEGMENT ;数据段 MESS DB 'INPUT HEXNUMBER:', '$' ERROR DB 'INPUT ERROR', 0DH, 0AH, '$' DATA ENDS STACK SEGMENT ;堆栈段 STA DW 32 DUP(?) TOP DW ? STACK ENDS CODE SEGMENT ;代码段 ASSUME CS: CODE, DS: DATA, ES: DATA, SS: STACK START: MOV AX, DATA ;初始化 MOV DS, AX MOV ES, AX MOV SP, TOP LLL: MOV AH, 09H ;显示提示信息 MOV DX, OFFSET MESS ;把MESS的偏移地址给DX INT 21H CRLF XOR DX, DX ;DX清零 MOV BL, 04H ;接收字符个数 GGG: MOV AH, 01H ;接收字符 INT 21H CMP AL, 0DH ;AL-0DH(判断是不是回车) JZ PPP ;是回车,转PPP CMP AL, 20H ;AL-20H(判断是不是空格) JZ PPP ;是空格,转PPP CMP AL, 30H ;AL-30H(判断是不是ASCII码0) JB KKK ;不是,转KKK SUB AL, 30H ;AL=AL-30H(将ASCII码转换成十六进制数) CMP AL, 0AH ;AL-0AH

微机实验--十六进制数转换为二进制数程序

一、实验目的 掌握键盘接收数据的方法,并了解键盘数据显示时需要转换为ASCII码及转换原理。 二、实验内容 编写程序,将键盘键入的四位十六进制数转换为等值的二进制数,并在屏幕上显示。 三、程序流程图 十六进制数转换为二进制数程序流程图

四、实验源程序 CRLF MACRO PUSH AX PUSH DX MOV AH,02H MOV DL,0DH INT 21H MOV AH,02H MOV DL,0AH INT 21H POP DX POP AX ENDM DATA SEGMENT MESS DB 'INPUT HEXNUMBER:','$' ERROR DB 'INPUT ERROR',0DH,0AH,'$' DATA ENDS STACK SEGMENT STA DW 32 DUP(?) TOP DW ? STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK START: MOV AX,DATA MOV DS,AX MOV ES,AX MOV SP,TOP LLL: MOV AH,09H MOV DX,OFFSET MESS INT 21H CRLF XOR DX,DX MOV BL,04H GGG: MOV AH,01H INT 21H

JZ PPP CMP AL,20H JZ PPP CMP AL,30H JB KKK SUB AL,30H CMP AL,0AH JB KKK SUB AL,07H CMP AL,0FH JBE GETS CMP AL,2AH JB KKK CMP AL,2FH JA KKK SUB AL,20H GETS: MOV CL,04H SHL DX,CL XOR AH,AH ADD DX,AX DEC BL JNZ GGG CRLF CALL ZHXS CRLF JMP LLL KKK: PUSH DX CRLF MOV AH,09H MOV DX,OFFSET ERROR INT 21H POP DX PPP: CRLF

二进制,八进制,十进制,十六进制之间的转换算法

二进制,八进制,十进制,十六进制之间的转换算法 一、十进制与二进制之间的转换 (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入。这个也是计算机在转换中会产生误差,但是由于保留位数很多,精度很高,所以可以忽略不计。

二进制如何转十六进制

二进制如何转十六进制 二进制数的书写通常在数的右下方注上基数2,或加后面加B表示。八进制用下标8或数据后面加Q表示。通常在表示时用尾部标志H或下标16以示区别。 1、二进制数、八进制数、十六进制数转十进制数 有一个公式:二进制数、八进制数、十六进制数的各位数字分别乖以各自的基数的(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、十进制数转二进制数、八进制数、十六进制数 方法是相同的,即整数部分用除基取余的算法,小数部分用乘基取整的方法,然后将整数与小数部分拼接成一个数作为转换的最后结果。 例:见四级指导16页。 3、二进制数转换成其它数据类型 ⑴二进制转八进制:从小数点位置开始,整数部分向左,小数部分向右,每三位二进制为一组用一位八进制的数字来表示,不足三位的用0补足,就是一个相应八进制数的表示。 010110.001100B=26.14Q 八进制转二进制反之则可。 ⑵二进制转十进制:见1 ⑶二进制转十六进制:从小数点位置开始,整数部分向左,小数部分向右,每四位二进制为一组用一位十六进制的数字来表示,不足四位的用0补足,就是一个相应十六进制数的表示。 00100110.00010100B=26.14H 4、十进制转各进制 要将十进制转为各进制的方式,只需除以各进制的权值,取得其余数,第一次的余数当个位数,第二次余数当十位数,其余依此类推,直到被除数小于权值,最后的被除数当最高位数。 一、十进制转二进制

二进制转化为十六进制

《微机原理》实验报告(参考格式,16K纸) 一、实验目的和要求 微机原理是信息类专业的一门选修课,而实验课是为了巩固课堂所学内容,并且能够亲自上机操作。其目的主要是使学生真正了解微机工作原理和低级语言程序设计的相关知识,通过实验训练进一步培养学生分析问题和解决问题的能力,培养学生的创新意识、创新精神和创新能力,为学生今后从事微机系统开发与研究工作打下扎实的基础。 上机操作是本课程的重要组成部分,通过上机操作可以使学生巩固和理解微机工作原理和低级语言程序设计的相关知识,培养学生独立思考、运用所学知识解决实际问题等方面能力的重要环节。本次实验要求为: 1. 掌握86系列汇编语言及指令的格式和寻址方式 2. 掌握86系列汇编语言各类指令的用法。 3. 掌握简单程序、分支程序、循环程序、子程序等的设计方法 4. 在实验的全过程中,培养学生勤奋学习、求真、求实的科学品德,培养学生的动手能力、思维能力、想象能力、表达能力。 二、实验内容和原理 题目设计要求: 在源程序中设置数据段、堆栈段及代码段。在数据段中定义八个字节数据,把这些数据转换成16进制数的ASCll码存在上述数据之后,然后在屏幕上显示这些数据。显示数据用DOS功能2号调用,每个数据用空格分隔。 三、仪器名称及主要规格(包括量程、分度值、精度等)、材料 计算机(配置), Pentiun(R) Dual-Core CPU T4300 @ 2.10GHz 2.09GHz , 1.93GHz 的内存

四、实验步骤 (填题目分析、程序框图) 题目分析: 在源程序中设置数据段、堆栈段及代码段。在数据段中定义八个字节数据,把这些数据转换成16进制数的ASCll码存在上述数据之后,然后在屏幕上显示这些数据。 程序框图:

十进制、二进制、八进制、十六进制之间的转换doc

十进制转二进制: 用 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.
二进制转十进制,十进制转二进制的算法
https://www.sodocs.net/doc/c91333175.html, 阅读:
5915 时间:2008-6-16 6:02:10 整理:华 夏黑盟
-----------------------------------------------------------------

二进制转十进制,十进制转二进制的算法 十进制转二进制: 用 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.转十进制:

基于Java的16进制数与2进制数互相转化方法

//十六进制数转二进制数 import java.util.Scanner; publicclass H_to_B { staticvoid HtoB_fun(String n){ char[] ch=n.toCharArray(); char str; String s=""; int p=0; for(int i=0;i='0'&&str<='9'){ String st= Character.toString(str);//字符转字符串 p=Integer.valueOf(st).intValue();//字符串转整型} else{ if(str=='A'){str=10;} if(str=='B'){str=11;} if(str=='C'){str=12;} if(str=='D'){str=13;} if(str=='E'){str=14;} if(str=='F'){str=15;} if(str=='.'){str=16;} p=(int)str; } switch (p){ case 0 : s+="0000"; break; case 1 : s+="0001"; break; case 2 : s+="0010"; break; case 3 : s+="0011"; break;

case 4 : s+="0100"; break; case 5 : s+="0101"; break; case 6 : s+="0110"; break; case 7 : s+="0111"; break; case 8 : s+="1000"; break; case 9 : s+="1001"; break; case 10 : s+="1010"; break; case 11 : s+="1011"; break; case 12 : s+="1100"; break; case 13 : s+="1101"; break; case 14 : s+="1110"; break; case 15 : s+="1111"; break; case 16 : s+="."; break; default : System.out.println("error!");

2进制、10进制和16进制的相互转换

整数时十进制与二进制相互转换: 二进制的1101转化成十进制 1101(2)=1*2^0+0*2^1+1*2^2+1*2^3=1+0+4+8=13 转化成十进制要从右到左用二进制的每个数去乘以2的相应次方,不过次方要从0开始。相反,用十进制的13除以2,每除一下将余数就记在旁边,最后按余数从下向上排列就可得到1101。由二进制数转换成十进制数的基本做法是,把二进制数首先写成加权系数展开式,然后按十进制加法规则求和。这种做法称为“按权相加”法。 2的0次方是1 2的1次方是2 2的2次方是4 2的3次方是8 2的4次方是16 2的5次方是32 2的6次方是64 2的7次方是128 2的8次方是256 2的9次方是512 2的10次方是1024 2的11次方是2048 2的12次方是4096 2的13次方是8192

2的14次方是16384 2的15次方是32768 有小数点的十进制与二进制之间的转换: 十进制数转换为二进制数时,由于整数和小数的转换方法不同,所以先将十进制数的整数部分和小数部分分别转换后,再加以合并。例如19.95 转2进制分为两个步骤: (1) 小数点前: 19/2=9余1 9/2=4 余1 4/2=2 余0 2/2=1 余0 1/2=0 余1 由下往上取余数10011 (2) 小数点后 0.95*2 = 1.9 取整1 (1.9-1)*2 = 1.8 取整1 (1.8-1)*2 = 1.6 取整1 (1.6-1)*2 = 1.2 取整1 (1.2-1)*2 = 0.4 取整0 (0.4-0)*2 = 0.8 取整0 (0.8-0)*2 = 1.6 取整1 (1.6-1)*2 = 1.2 取整1

二进制数和十六进制数之间转换

北华航天工业学院 课程设计报告(论文) 设计课题:二进制数和十六进制数之间转换专业班级: 3 学生姓名: 指导教师: 设计时间:

北华航天工业学院电子工程系 微型计算机原理与接口技术课程设计任务书 姓名:专业:电子信息工程班级: 指导教师:职称:讲师 课程设计题目: 代码转换(二进制数和十六进制数之间转换) 已知技术参数和设计要求: 1.编写一个程序,要求从键盘上连续输入二进制或十六进制字符,然后在屏幕上自动显示出二---十六进制之间转换的结果。 2.利用ROL和RCL循环指令以及十六进制数所对应的ASCII码比其本身大30H(0-9)或37H(A-Z)的关系, 将输入数转换成对应的ASCII 码,再调用DOS系统功能调用中的2号(显示字符)功能,将转换后的字符显示出来。 所需仪器设备: 计算机、MASM软件 成果验收形式: 程序说明,计算机演示,设计报告 参考文献: 微机原理与接口技术 8086实验指导书 时间安排 十六周:程序编辑,上机运行结果 十七周:验收成果 指导教师:教研室主任: 年月日

内容摘要 在计算机系统中有多种数制和编码,常用的数制有二进制、八进制以及十六进制,常用的代码有BCD码、ASCII码和七段显示码等。这些数制和编码根据其作用的不同,在存储形式上也有差异。在实际应用中,它们也因使用的要求不同而有所差异。在配备操作系统管理程序的计算机中,有些代码转换程序已在系统管理软件中编好。还有些代码转换需要根据使用要求通过编程完成。因此,代码转换是非数据处理中最常见的情况。 索引关键词:代码转换二进制十六进制DOS系统

目录 一概述 (4) 1-1设计目的 (4) 1-2设计要求 (4) 二方案设计与论证 (4) 2-1二进制向十六进制的转换 (4) 2-2十六进制向二进制的转换 (4) 三程序分析 (5) 四程序流图 (7) 五运行结果 (10) 六心得体会 (10) 七参考文献 (10)

进制转换方法

Hex number system 是计算机中数据的一种表示方法.同我们日常中的十进制表示法不一样.它由0-9,A-F,组成.与10进制的对应关系是: 0-9对应0-9; A-F对应10-15; N进制的数可以用0---(N-1)的数表示超过9的用字母A-F 例如: 10进制的32表示成16进制就是:20 16进制的32表示成10进制就是:3×16^1+2×16^0=50 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次方。这一点使得三种进制之间可以非常直接地互相转换。8进制或16进制缩短了二进制数,但保持了二进制数的表达特点。在下面的关于进制转换的课程中,你可以发现这一点。

6.2 二、八、十六进制数转换到十进制数 6.2.1 二进制数转换为十进制数 二进制数第0位的权值是2的0次方,第1位的权值是2的1次方…… 所以,设有一个二进制数:0110 0100,转换为10进制为: 下面是竖式: 0110 0100 换算成十进制 第0位0 * 2^0 = 0 第1位0 * 2^1 = 0 第2位1 * 2^2 = 4 第3位0 * 2^3 = 0 第4位0 * 2^4 = 0 第5位1 * 2^5 = 32 第6位1 * 2^6 = 64 第7位0 * 2^7 = 0 + --------------------------- 100 用横式计算为: 0 * 2^0 + 0 * 2^1 + 1 * 2^2 + 0 * 2^3 + 0 * 2^4 + 1 * 2^5 + 1 * 2^6 + 0 * 2^7 = 100

十六进制数转换为二进制数

CRLF MACRO PUSH AX ;将AX,DX压栈 PUSH DX MOV AH,02H ;输出回车 MOV DL,0DH INT 21H MOV AH,02H ;输出换行 MOV DL,0AH INT 21H POP DX ;弹出DX,AX POP AX ENDM DATA SEGMENT MESS DB'INPUT HEXNUMBER:','$' ERROR DB'INPUT ERROR',0DH,0AH,'$' DATA ENDS STACK SEGMENT STA DW32 DUP(?) TOP DW? STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DA TA,ES:DATA,SS:STACK START: MOV AX,DA TA MOV DS,AX MOV ES,AX MOV SP,TOP LLL: MOV AH,09H MOV DX,OFFSET MESS INT 21H ;显示提示信息 CRLF ;调用宏 XOR DX,DX ;DX清零 MOV BL,04H ;设置接收字符位数 GGG: MOV AH,01H ;键盘输入并显示 INT 21H CMP AL,0DH ;判断输入是否为空格或回车 JZ PPP ;是,转到PPP CMP AL,20H JZ PPP CMP AL,30H ;输入数的ASCII码小于30H, JB KKK ;跳到KKK SUB AL,30H ;AL=AL-30H CMP AL,0AH ;AL小于0AH,跳到GETS (即判断是否为0到9的数)

JB GETS CMP AL,11H ;AL小于11H跳转到KKK (即判断是否为A到F的数) JB KKK SUB AL,07H ;AL=AL-07H CMP AL,0FH ;AL小于等于0FH跳转到GETS JBE GETS CMP AL,2AH ;AL小于2AH跳到KKK JB KKK CMP AL,2FH ;AL大于2FH跳到KKK JA KKK ;(即判断是否为a到f的数) SUB AL,20H ;AL=AL-20H GETS: MOV CL,04H ;令CL=04H SHL DX,CL ;逻辑左移四次 XOR AH,AH ;AX清零 ADD DX,AX ;DX=DX+AX(即将二进制数送DX) DEC BL ;BL=BL-1 JNZ GGG ;不为零,跳转到GGG,继续接收 CRLF ;回车换行 CALL ZHXS ;调用子程序ZHXS CRLF ;回车换行 JMP LLL ;跳转到LLL,继续接收下一个十六进制数KKK: PUSH DX CRLF ;回车换行 MOV AH,09H MOV DX,OFFSET ERROR ;显示出错信息 INT 21H POP DX PPP: CRLF CALL ZHXS ;调用ZHXS,显示转换结果 MOV AX,4C00H INT 21H ZHXS PROC ;显示子程序 MOV CX,0010H ;CX=0010H(即循环6次) MOV BX,DX TTT: ROL BX,1 ;循环右移 MOV DL,BL AND DL,01H ADD DL,30H MOV AH,02H INT 21H LOOP TTT RET ZHXS ENDP

相关主题