进制转换程序设计1

进制转换程序设计1
进制转换程序设计1

1 常用数制

计算机常用的数制:二进制,十进制,八进制,十六进制。

通常表示一个数时,每个数字表示的量不散取决于数字本身,而且取决于所在的位置,这种表示方法被称为位置表示法。在位置表示法中,对每个数位赋予一定的位值,称为权。每个数位上的数字锁表示的量是这个数字和权的乘积。相邻两位中高位的权与低位的权之比如果是个常数,则此常数称为基数,用X 表示,则数 1-n a 0a 1-a m a -所表示的量N 为

m m n n n n X a X a X a X a X a N --------++++++= 11002211

式中,从00X a 起向左是数的整数部分,向右是数的小数部分;)1(m i n a i -≥≥-表示各数位上的数字,称为系数,它可以在0,1,…,X-1共X 中数中任意取值;m 和n 为冥指数,均为正整数。正由于相邻高位的权与低位的权相比是个常数,因而在这种位值计数法中,基数(或称底数)X 的取值不同便得到不同进位制数的表达式。 (1)十进制

十进制是生活中最常用的十进制,当X=10时,得十进位制数的表达式为

i n m

i i

a N 10)(1

10∑--==

其特点是:系数i a 只能在0~9这10个数字中取值;每个数位上的权是10的某次冥;在加,减运算中,采用“逢十进一,借一当十”的规则。 (2)二进制

二进制是计算机中最常用的数值。当X=2时,得二进制数的表达式为

i n m

i i

a N 2)(1

2∑--==

二进制的特点是:系数i a 只能在0和1这两个数字中取值;每个数位上的权是2的某次冥;在加减运算中,采用“逢二进一,借一当二”的规则。 (3)八进制和十六进制

由于1位八进制数对应3位二进制,1位十六进制对应4位二进制,因此,当二进制数列很长时,可以用八进制或十六进制数来表示。当X=8时,得八进制数的表达式为

i n m

i i

a N 8)(1

8∑--==

八进制的特点是:系数i a 只能在0~7这8个数字中取值;每个数位上的权是8的某次冥;在加减运算中,采用“逢八进一,借一当八”的规则。

同理,当X=16时,得十六进制数的表达式为

i n m

i i

a N 16)(1

16∑--==

十六进制的特点:系数i a 只能在0~15这16个数字中取值(其中0~9这10个数字借用十进制中的数码,10~15这6个数用A,B,C,D,E,F 表示);每个数位上的权的16的某次冥;在加减运算中,采用逢“十六进一,借一当十六”的规则。

表1.1列出四种进位制中数的表示法,其中B 是Binary 的缩写,表示该数为二进制数;Q 表示该数为八进制数;H 是Hexadecimald 的缩写,表示该数是十六进制数;十进制数采用符合D (Decimal )。

表1.1 十进制,二进制,八进制,十六进制数码对照表

数制间的转换规则

1.十进制数与非十进制数之间的转换 (1)十进制数转换成非十进制数

把一个十进制数转换成非十进制数(基数记作R)分成两步.整数部分转换时采用“除R 取余法”;小数部分转换时采用“乘R取整法”。

(2)非十进制数转换成十进制数

非十进制数(基数记作R,第j个数位的位权记作Rj)转换成十进制数的方法:按权展开求其和。

2.非十进制数之间的转换

(1)二进制数与八进制数之间的转换

二进制数转换成八进制数的方法.以小数点分界,整数部分自右向左、小数部分自左向右,每三位一组,不足三位时,整数部分在高位左边补0,小数部分在低位右边补0,然后写出对应的八进制数码。

八进制数转换成二进制数的方法:用八进制数码对应的三位二进制数代替八进制数码本身即可。

(2)二进制数与十六进制数之间的转换

二进制数转换成十六进制数的方法:以小数点分界,整数部分自右向左、小数部分自左向右,每四位一组,不足四位时,整数部分在高位左边补0,小数部分在低位右边补0,然后写出对应的十六进制数码。

十六进制数转换成二进制数的方法:用十六进制数码对应的四位二进制数代替十六进制数码本身即可。

2设计原理

程序流程图如图2.1所示。

图2.1 程序运算流程图

对于不同的情况我们只需要定义不同的输入函数和输出函数,根据不同的情况,调用不同的输入函数和输出函数。本程序调用二进制输入,十进制输入,十六进制输入,二进制输出,十进制输出,十六进制输出等六个子程序。

确定程序功能和功能结构,数据结构,以及用户界面;对各功能模块进行准确的定义,对全局数据变量进行说明和定义;确定各功能模块的原理及算法并画出相应的数据和程序流图。课设涉及到各种跳转,各个寄存器之间的移动,特定的输入和输出。调用01h 的输入功能,结果在al中,调用02h的输出功能,输出得到是dl里面的内容。提示信息的输出是用db来定义的,结束标志是$,同时我也定义了一个表,来应对各种不同的情况。

首先输出一个选择窗口,有6种选择。按照自己的要求选择,选择之后,就会调用相应的输入函数,必须输入相应进制的数进行处理,2进制数必须输入16位,16进制数输入4位,10进制数要求输入的必须小于2的16次方。输入之后,程序就会处理输入数据,然后调用相应的输出函数,就会输出相应的数据。输入函数,输出函数都是子函数。

整个程序由主程序和若干子程序组成。

子程序:完成各数制之间转换的具体功能实现

CRLF :实现回车换行的操作

INBIN :二进制输入子程序

OUTBIN :二进制输出子程序

INDEC :十进制输入子程序入

INHEX :十六进制输入子程序

OUTDEC :10进制输出子程序

OUTHEX :16进制输出子程序

L1:二进制转化成十进制

L2:二进制转换成十六进制

L3:十进制转换成二进制

L4:十进制转换成十六进制

L5:十六进制转换成十进制

L6:十六进制转换成二进制

主程序:主要实现友好的交互界面的设计,以及代码与数制之间相互转换的子程序调用。

定时器通道3的G端与61H端口的bit0位相联,如果将61H端口的bit0位置成1,

那么定时器通道3就被启动,此时将有一组信号从OUT端输出,信号的频率可以用程序控制;若61H端口bit0位为0,则定时器被关闭,OUT端就会恒定为1,此电路用在这里相当一个"可控开关",如果将61H端口的bit0、bit1位都置成1,则相当于既打开了定时器又打开了开关,这时候定时器产生的声音信号就会送到放大器推动喇叭发声;若将bit0

位置0,则定时器关闭,此时OUT端为1,这时候如果连续改变bit1位的状态,也可以从喇叭中听到声音;若将OUT位置0,则开关关闭,此时即使打开定时器也不能听到声音。 PC中的定时电路有三个通道,通道3用于发声,通道1用于控制系统内部的时钟。

通道1的工作方式和通道3一样,但是系统启动时设定其发出一个频率固定为18.2Hz 的信号,这个信号直接送到系统中的"中断控制器"。每一个"Hz"都产生一个硬件中断,一般称这个硬中断为"IRQ0",对应的中断号是08H。也就是说,当计算机启动后,我们的机器看上去十分平静,但实际上CPU非常忙碌。在定时器的控制下每隔55毫秒就要执行一个08H号中断,这个中断的主要工作就是连续地计数。

在内存"0040H:006CH"处有四字节的存储空间专门用于保存计数值,CPU每执行一次08H中断,这四字节的计数值就被加1,不难算出这个计数值每增加1091后时间恰好过了1分钟,每增加65454后时间恰好过了1小时。系统内部的时钟之所以能准确走时,靠得就是08H中断和这四字节的计数值。因此我们要想精确的定时,必须依靠时钟计数值才行。而该程序对时间要求不是那么严。

本次设计中,先将定时器3的OUT端置1,再给bit1一个矩形波,通过矩形波的频率来控制喇叭发声的频率;若控制OUT端为高电平时的时长,则可以控制报警音的时间。

设计的报警子程序模块如下:

BELL PROC

MOV DX,65535

IN AL,61H

AND AL,0FCH

TRIG: XOR AL,2

OUT 61H,AL

MOV CX,65535

Delay:LOOP Delay

DEC DX

JNE TRIG

RET

BELL ENDP

3源程序

DATA SEGMENT ;数据段

MENU DB 'Please Input your Choice:',0dh,0ah

db '1: Bin -->Dec',0dh,0ah

db '2: Bin -->Hex',0dh,0ah

db '3: Dec -->Bin',0dh,0ah

db '4: Dec -->Hex',0dh,0ah

db '5: Hex -->Dec',0dh,0ah

db '6: Hex -->Bin',0dh,0ah

db '0: Exit. $',0dh,0ah

mess0 db 'error!$'

mess1 db 'Please input a Bin number:$'

mess2 db 'Please input a Dec number:$'

mess3 db 'Please input a Hex number:$'

mess4 db 'Output Bin is: $'

mess5 db 'Output Dec is: $'

mess6 db 'Output Hex is: $'

TABLE DW L0,L1,L2,L3,L4,L5,L6

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

MAIN PROC FAR

PUSH DS

XOR AX,AX ;清零AX,CF

PUSH AX ;NT 会改变AL的值,应压栈保护MOV AX,DATA

MOV DS,AX

LKS:LEA DX,MENU ;实现根据输入进行跳转MOV AH,09H

INT 21H ;显示字符串DS:DX=字符串

MOV AH,01H

INT 21H ;带回显的字符输入AL=8位数据CMP AL,30H

JB LK;低于转移

CMP AL,36H

JA LK ;高于转移

JMP LK1

LK:CALL BELL

JMP LKS

LK1:AND AL,0FH

LEA SI,TABLE ;将TABLE首地址给SI

MOV AH,0

SHL AX,1 ;将AX左移一位

ADD SI,AX;相加结果送回SI

JMP [SI] ;跳转到对应的进制转换部分

L1:CALL INBIN ;调用子程序INBIN

CALL CRLF

CALL OUTDEC

CALL CRLF

JMP LKS ;无条件转移到LKS子程序L2:CALL INBIN ;BIN——>HEX

CALL CRLF

CALL OUTHEX

CALL CRLF

JMP LKS

L3:CALL INDEC;DEC——>BIN

CALL CRLF

CALL OUTBIN

CALL CRLF

JMP LKS

L4:CALL INDEC ;DEC——>HEX

CALL CRLF

CALL OUTHEX

CALL CRLF

JMP LKS

L5:CALL INHEX ;HEX——>DEC

CALL CRLF

CALL OUTDEC

CALL CRLF

JMP LKS

L6:CALL INHEX ;HEX——>BIN

CALL CRLF

CALL OUTBIN

CALL CRLF

JMP LKS

L0:RET ;返回

MAIN ENDP

CRLF PROC ;回车换行子程序MOV AH,02H ;将02H送AH

MOV DL,0AH

INT 21H

MOV DL,0DH

INT 21H

RET ;返回

CRLF ENDP

BELL PROC ;报警子程序

CALL CRLF

LEA DX,MESS0

MOV AH,09H

INT 21H

CALL CRLF

MOV DX,6553

IN AL,61H

AND AL,0FCH

TRIG: XOR AL,2

OUT 61H,AL

MOV CX,65535

Delay:LOOP Delay

DEC DX

JNE TRIG

RET

BELL ENDP

INBIN PROC ;二进制的输入

LEA DX,MESS1 ;MESS1首地址送DX

MOV AH,09H

INT 21H

MOV BX,0

INBL1:MOV AH,01H

INT 21H

CMP AL,0DH ;比较

JZ INBEXIT ;等于或结果为0转移

AND AL,01H ;相与,送到AL

SHL BX,1 ;将BX左移一位

OR BL,AL ;相或,送到BL

JMP INBL1 ;无条件转移到INBL1

INBEXIT:RET ;返回

INBIN ENDP

;二进制的输入:每次我们输入的数都放在al中,每次都将al和空的bl进行或运算,实际上就将我们输入的数据存到了bx中,之后左移一位,在输入数据,之后重复进行上面的步骤,这样就将我们所输入的数据存到了bx中。

INDEC PROC ;十进制的输入

LEA DX,MESS2

MOV AH,09H ;调用9号中断功能,字符串显示功能

INT 21H

MOV BX,0

INDL1:MOV AH,01H

INT 21H

CMP AL,0DH

JZ INDEXIT ;等于或结果为0转移

SUB AL,30H

CMP AL,9

JBE INDL2 ;低于或等于,不高于转移

SUB AL,7

INDL2:MOV AH,0

XCHG AX,BX ;交换,AX<——>BX

MOV CX,10

MUL CX ;(AX)<——(AL) (SRC)

ADD BX,AX

JMP INDL1

INDEXIT:RET

INDEC ENDP

;十进制的输入:通过ax和bx的配合使用,每次都将前一次输入的数据乘以10,在加上这一次的输入,就这样就形成了10进制的输入。

INHEX PROC ;十六进制的输入

LEA DX,MESS3

MOV AH,09H

INT 21H

MOV BX,0

IHL1:MOV AH,01H

INT 21H

CMP AL,0DH

JZ IHEXIT ;等于或结果为0转移

SUB AL,30H ;相减,结果送AL

CMP AL,9

JBE IHL2 ;低于或等于,不高于转移

SUB AL,7

IHL2:MOV CL,4

SHL BX,CL

OR BL,AL

JMP IHL1

IHEXIT:RET

INHEX ENDP

;十六进制的输入:输入的数据放在al中,将al和bl将行或运算,将我们所输入的数据保存起来,之后左移4位,在重复这个操作,将我们所输入的数据全部保存在16数据里面。

OUTBIN PROC ;二进制的输出

LEA DX,MESS4

MOV AH,09H

INT 21H

MOV CX,16

OBL1:ROL BX,1

MOV DL,BL

AND DL,01H ;相与

OR DL,30H ;相或

INT 21H

LOOP OBL1 ;循环OBL1子程序

RET

OUTBIN ENDP

;二进制的输出:我们所输入的数据都保存在bx中,每次都将bx左移一位,然后将bl 的数据转存到dl中,加上30h后,在输出之后就是二进制的了。

OUTDEC PROC ;十进制的输出

LEA DX,MESS5

MOV AH,09H

INT 21H

PUSH BX ;入栈

MOV AX,BX

MOV DX,0 ;余数

MOV CX,10000

DIV CX ;AX除以CX商送AL,余数送AH

MOV BX,DX

MOV DL,AL

OR DL,30H ;逻辑与运算

MOV AH,02H

INT 21H

MOV AX,BX

MOV DX,0

MOV CX,1000

DIV CX ;AX除以CX商送AL,余数送AH

MOV BX,DX

MOV DL,AL

OR DL,30H

MOV AH,02H

INT 21H

MOV AX,BX

MOV DX,0

MOV CX,100

DIV CX

MOV BX,DX

MOV DL,AL

OR DL,30H

MOV AH,02H

INT 21H

MOV AX,BX

MOV CL,10

DIV CL

MOV BL,AH

MOV DL,AL

OR DL,30H

MOV AH,02H

INT 21H

OR DL,30H

MOV AH,02H

INT 21H

POP BX ;出栈

RET

OUTDEC ENDP

;十进制的输出: 将保存在bx中的数据转存到ax中来,由于19位数据所存最大数据是6万多,所以第一次除以一万,余数存放在dx中,商存在al中,将ax中的内容转存到dl 中,输出出来,而将dx中的余数又转存到bx中,继续上面的操作,不过除数改城了1000,然后除数变成100,10,最后输出商。

OUTHEX PROC ;十六进制输出程序

LEA DX,MESS6

MOV AH,09H

INT 21H

MOV CX,4

OHL1:ROL BX,1 ;循环左移

ROL BX,1

ROL BX,1

ROL BX,1

MOV DL,BL

AND DL,0FH

ADD DL,30H ;加运算

CMP DL,39H

JBE OHL2 ;低于或等于,不高于转移

ADD DL,7

OHL2:MOV AH,02H

INT 21H

LOOP OHL1 ;OHL1循环

RET

OUTHEX ENDP

;16进制的输出:bx中左移4位,将dl低四位与bl低四位,进行与运算,结果在dl中,然手加上30h,变成ask码输出,就可以输出16进制数。

CODE ENDS

END MAIN

4 程序运行结果

运行程序首先输出一个选择窗口,有6种选择。按照自己的要求选择进制转换之间的关系,选择之后,调用相应的输入函数,必须输入相应进制的数进行处理。其中2进制数必须输入16位,16进制数输入4位,10进制数要求输入的必须小于2的16次方。输入之后,程序就会处理输入数据,然后调用相应的输出函数,就会输出相应的数据。

开始运行程序

通过输入数字确定进制之间转换,其验证结果如下:

输入0~6之外的数字是错误的,发出警报,显示为:

1.二进制转换为10进制

2.二进制转换为16进制

3.10进制转换为二进制

4.十进制转换为十六进制

5.十六进制转换为十进制

6.十六进制转换为二进制

这个程序要求我们输入必须符合二进制,十进制和十六进制的规则,当二进制转化成其他进制时输入可为16位之内,而其他进制转换为二进制,二进制显示的是16位。16进制显示的是4位。当输入内容不符合程序要求时,仪器会发出警报,并且重新选择,直到选择或者数入正确为止。

5心得体会

本次实验设计的提点是将不同进制的输入输出分别写成功能不同的函数,不近翻遍调用,而且只需定义一次,不可以重复调用,可以简化程序。

我的收获是对数制转换的原理有了叫较为清楚的理解,可以解释原来不懂的程序,对应各种寄存器的跳转有了一定的了解,同时认识到由于寄存器的数量有限,我们有时侯不得不进行出栈和入栈了,这样可以解决有时候寄存器不够的情况,对应进一步学习汇编有了一定的推动作用,汇编基础有了一定的提高,这个课程设计让我对汇编重新复习一遍。

汇编语言程序设计是一门很抽象的学科,学起来也比较乏味。一开始学的时候感觉很难,也没什么兴趣。但随着学习的推进,以及上机编程,逐渐感到轻松。在这次课程设计中,让我更加熟悉了汇编语言的一些基本的指令;掌握了汇编语言的一些基本的中断调用功能,可以用汇编语言调用各种中断调用功能,并由此实现对硬件的控制;能够熟练的利用子程序和宏进行编程。

在设计过程中,不断对程序进行修改、改进,增强了自己分析问题、解决问题的能力;在不断的调试中,也让自己发现了自己存在的一些错误以及一些调试时应注意的问题,同时也更深的理解了寄存器、存储器等工作原理以及一些指令执行后对它们的改变,例如INT 指令会改变AL的值,在编程时应注意这方面的问题。

在编写过程中,让我深刻的体会到了搞科学的严谨性。有时一个逗号或者写错一个字母这样一点点小小的错误,就会产生十几个错误,导致调试的失败。不管做什么事,都要认认真真,否则就会得不偿失了。

当设计一步步接近成功,每一个子程序的调试成功,都让自己感到喜悦,从中体会到了编程的乐趣,有一种成就感,也让自己树立了信心,增强了对汇编语言程序设计的兴趣。

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

参考文献

[1] 易先清. 微机计算机原理与应用. 北京:电子工业出版社,2001

[2] 裘雪红等.微型计算机原理与接口技术.西安:电子科技大学出版社,2001

[3] 潘新民等.微型计算机原理汇编接口技术.北京:希望电子出版社,2002

[4] 李文英,刘星,宋蕴新,李勤.微机原理与接口技术.北京:清华大学出版社,2001

[5] 钱晓捷,陈涛.16/32位微机原理、汇编语言及接口技术.北京:机械工业出版社,

2001

[6] 沈美明,温冬婵.IBM-PC汇编语言程序设计.北京:清华大学出版社,2001

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

若十进制数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=2^2+2+0=6 二进制转十六进制 要将二进制转为16进制,只需将二进制的位数由右向左每四位一个单位分隔,分的不够的前边补零,用四位数的二进制数来代表一个16进制。转换表如下,括号内为十六进制 0000(0)0001 (1)0010 (2)0011 (3)0100 (4)0101 (5)0110 (6)0111 (7)1000 (8)1001 (9)1010(A)1011 (B)

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

一,十进制转换十六进制 若十进制数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 直接计算就是: 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=2^2+2+0=6 五,二进制转十六进制 要将二进制转为16进制,只需将二进制的位数由右向左每四位一个单位分隔,分的不够的前边补零,用四位数的二进制数来代表一个16进制。转换表如下,括号内为十六进制 0000(0)0001(1)0010(2)0011(3)0100(4)0101(5) 0110(6)0111(7)1000(8)1001(9)1010(A)1011(B) 1100(C)1101(D)1110(E)1111(F) 例如:10101011划分为1010 1011,根据转换表十六进制为AB

十进制和二进制相互转化程序设计书

摘要 VC++是微软公司开发的一个集成开发环境(IDE),就是使用 c++的一个开发平台。本系统就是根据现阶段的需要,通过VC++开发一个二进制与十进制相互转换系统来实现对二进制向十进制转换、十进制向二进制转换。整个系统从符合操作简便、界面友好、灵活、实用、安全的要求出发,完成了对二进制与十进制互换的过程,包括转换类型、二进制位数、输入是否有误,以及简介信息,数字信息和位数信息等常用工作。 关键词:二进制,十进制,转换,VC++

目录 1 需求分析 (1) 1.1 数据需求分析 (1) 1.2 功能需求分析 (2) 2 系统总体设计 (2) 2.1 模块划分 (2) 2.2 系统模块结构图 (3) 3 系统详细设计 (3) 3.1 程序流程图 (3) 3.2 中文DOS界面 (5) 3.3 程序代码清单 (5) 4 模块划分系统连编与运行结果 (7) 4.1 程序运行起始界面 (7) 4.2 输入一个十进制的正整数,转化为二进制 (8) 4.3 输入一个十进制的负数,转化为二进制 (8) 4.4 输入一个十进制的负数,转化为二进制 (9) 4.5 输入一个十进制小数,转化为二进制时,提示为 (9) 总结 (10) 参考文献 (10)

1需求分析 随着技术的不断提高,进制转换向着简单化,规模化发展,而对于只能识别二进制0和1码的计算机来说,如何翻译成人类可以认识和编译的语言,和安全加密等给信息管理有关的信息随之增加。在这种情况下单靠人工来处理这些信息不但显得大不从心,而且极容易出错。因此,需要开发二进制与十进制互换系统,该系统可以实现由计算机代替人工执行一系列复杂而繁琐的操作,使得办公人员可以轻松快捷的完成进制转换的任务。 总结系统需求分为大体分为5个模块: 首先第一个需要数据的信息输入,即输入数据的基本信息包括输入的进制选项,所输入的二进制位数,所输入的二进制数,所输入的十进制数和判断是否全1或全0五个模块。 第二个需求是判断数据进制选项信息,在信息和科技不断进步的今天,数据及时准确的更新成了任何一个系统的首要任务,本系统应时代所需设计了数制信息功能,包括对包括数据的进制,二进制数据的位数,十进制数据,进行进制转换计算。 第三个需求是所输入的二进制数据,数据的运行使用主要是解决向十进制转换 第四个需求是所输入的十进制数据,数据运行使用主要是解决向二进制转换。 第五个需求是打印退出,在对系统进行操作后,退出系统。 1.1 数据需求分析 本系统的主要数据进制转换的实现。转换包括:二进制数向十进制数转换,十进制数向二进制数转换,判断是否为全0或全1,是否继续执行等。

二进制与十进制的转换(教案)

二进制与十进制的转换教案 【教学目的与要求】 1、熟悉数制的概念; 2、掌握位权表示法; 3、熟练掌握二进制与十进制之间的转换方法。 【课时安排】1课时。 【教学重点与难点】 1、难点:位权表示法十进制转化为二进制 2、重点:二、十进制间相互转换 【教学过程】(以下教师的语言、活动简称“师”,学生的活动简称“生”) (一)新课导入 生:加减乘除 师:对,我们最开始学习的就是十以内的加法,之后是两位数的加法,在两位数加法的学习中,老师是不是经常会说,要注意逢十进一?也就是我们平常说的别忘了进位。 (PPT展示)像这样按进位的原则进行记数的方法叫做进位记数制。“进位记数制”简称为“数制”或“进制”。我们平时用的最多的就是十进制了 那么,大家再想一下,还有没有其他的进制呢?比如:小时、分钟、秒之间是怎么换算的?生:1小时=60分钟1分钟=60秒 师:那我们平时会不会说我做这件事用了90分钟呢?不是吧,我们一般会说,用了一个半小时,也就是说:逢60进一,这就是60进制。 (PPT展示)由此可以推断出:每一种数制的进位都遵循一个规则,那就是——逢N进1。这里的N叫做基数。所谓“基数”就是数制中表示数值所需要的数字字符的总数,比如,十进制中用0——9来表示数值,一共有10个不同的字符,那么,10就是十进制的基数,表示逢十进一。 师:下面我们再引入一个新概念——“位权”,什么是位权呢?(PPT展示)大家看一一这个十进制数:1111.111,这7个1是不是完全一样的呢?有什么不同呢?第一个1表示1000,第二个1表示100,……

那么,这个“若干次”是多少呢?有没有什么规定呢?大家观察一下这个例子,以小数点为界,整数部分自右向左,依次是基数的0次、1次、2次、3次幂。小数部分,自左向右,分别是基数的-1次、-2次、-3次幂。 大家再看一下:2856.42这个十进制数,它的值是怎么算出来的呢? 这就叫做按权相加法。也就是让每一位上的数字字符乘以它所代表的权。那么,这种方法有什么用呢?这就是本节课的重点内容。 (二)数制转换 大家都知道,计算机运算时采用的是二进制,但人们在使用计算机解决实际问题时通常使用十进制,这就有一个十进制向二进制转换或由二进制向十进制转换的过程。 也就是说,在使用计算机进行数据处理时首先必须把输入的十进制数转换成计算机所能接受的二进制数;计算机在运行结束后,再把二进制数转换为人们所习惯的十进制数输出。这种将数由一种数制转换成另一种数制称为数制间的转换。 二进制的特点:只有二个不同的数字符号:0和1;逢二进1 1)二进制转十进制

各种进制之间转换方法

各进制转换方法(转载) 一、计算机中数的表示: 首先,要搞清楚下面3个概念 ?数码:表示数的符号 ?基:数码的个数 ?权:每一位所具有的值 请看例子: 数制十进制二进制八进制十六进制 数码0~9 0~1 0~7 0~15 基10 2 8 16 权10o,101,102,…2o,21,22,…8o,81,82,…16o,161,162,…特点逢十进一逢二进一逢八进一逢十六进一 十进制4956= 4*103+9*102 +5*101+6*10o 二进制1011=1*23+0*22 +1*21+1*2o 八进制4275=4*83+2*82 +7*81+5*8o 十六进制81AE=8*163+1*162 +10*161+14*16o

二、各种进制的转换问题 1.二、八、十六进制转换成十进制 2.十进制转换成二、八、十六进制 3.二进制、八进制的互相转换 4.二进制、十六进制的互相转换 1、二、八、十六进制转换成十进制 方法:数码乘以相应权之和 2、十进制转换成二、八、十六进制 方法:连续除以基,直至商为0,从低到高记录余数

3、二进制、八进制的互相转换 方法: ?二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换成八进制 ?八进制转换成二进制:用3位二进制数代替每一位八进制数 例(1101001)2=(001,101,001)2=(151)8 例 (246)8=(010,100,110)2=(10100110)2 4、二进制、十六进制的互相转换 方法: ?二进制转换成十六进制:从右向左,每4位一组(不足4位左补0),转换成十六进制 ?十六进制转换成二进制:用4位二进制数代替每一位十六进制数 例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16 例 (4B9E)16=(0100,1011,1001,1110)2=(100101110011110)2 三、各种进制数的运算

VB程序设计-进制转换研究

VB程序设计-进制转换研究 (作者:草原飞狼 2014年5月29日) 声明:仅供学习与交流使用,高手请飘过,谢谢!所有代码都是个人亲自编写并调试成功。 布局 算法示意图(1)

算法示意图(2) 运行界面(1)源代码如下: Private Sub Command1_Click()

Rem 二进制转十进制,普通方法 Dim d As String 'd表示text1中的某一个具体的字符 Dim i As Integer 'i表示循环变量 Dim str As String 'str表示text1中去掉空格后的字符串 Dim dd As Integer 'dd表示一个十进制数 Dim len_str As Integer '表示text1中去掉左右空格后文本的长度 str = Trim(Text1.Text) len_str = Len(str) Rem 以下是二进制输入合法性的判断 For i = 1 To len_str d = Val(Mid(str, i, 1)) If d > 1 Then MsgBox "请重新输入一个合法的二进制数!", vbOKOnly + vbExclamation, "错误提示" Text1.Text = "1010" Text1.SetFocus Exit Sub End If Next i Rem 以下是二进制转十进制的算法 dd = 0 For i = 1 To len_str dd = dd + Val(Mid(str, i, 1)) * 2 ^ (len_str - i) '核心算法,注意理解 Next i Text3.Text = dd End Sub Private Sub Command2_Click() Rem 清空 Text1.Text = "" Text2.Text = "" Text3.Text = "" Text4.Text = "" End Sub Private Sub Command3_Click() Rem 退出 Unload Me End Sub Private Sub Command4_Click() Rem 十进制转二进制,普通方法 Dim str As String '用于连接生成的余数 Dim dd As Integer '用于生成当前的商 dd = Val(Text2.Text)

数制转换数据结构课程设计报告

《数据结构》 课程设计报告书 题目:数制转换 系别:计算机科学与应用系学号: 学生姓名: 指导教师: 完成日期:2013—6—1

数制转换 1.需求分析 任意给定一个M进制的数x ,实现如下要求 1)求出此数x的10进制值(用MD表示) 2)实现对x向任意的一个非M进制的数的转换。 3)至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)。 2.概要设计 程序流程可以用以下流程图来刻画: A用数组实现 B用栈实现 3.详细设计 A.用数组实现该问题 D2M()函数和M2D()函数是实现该问题的主要函数。D2M()函数是实现十进制转换为其他进制的函数,它是将输入的十进制数x首先对需要转换的进制M取余,然后在对其取整,接着通过递归调用D2M()函数一次将得到的整数部分一次先取余后取整,并将所得的余数依次存入下一数组,然后逆向去除数组中的元素,即得到转换后的结果。而M2D()函数是实现其他进制M转换为十进制,并将其转换为非M进制。M进制转十进制则是从该M 进制数的

最后一位开始运算,依次列为第0、1、2、……..N位并分别乘以M的0、1、2、…..N次方,将得到的次方相加便得到对应的十进制数,再调用D2M()函数将其转换为非M进制的数。 B.用栈实现 栈具有后进先出的性质,具体实现方法和数组的方法有很大联系,不再过多解释。 4.调试分析 (1)构造栈的方法通过查阅书籍知道了。 (2)数组的递归调用查阅相关书籍了解了。 (3)为了让界面表达更清晰,多次调试完善了界面。 5.测试结果 下面是我的测试函数及运行结果: A.数组测试结果

各种进制之间转换方法

各进制转换方法(转载)一、计算机中数的表示: 首先,要搞清楚下面3个概念 ?数码:表示数的符号 ? 基:数码的个数 ?权:每一位所具有的值

、各种进制的转换问题 1. 二、八、十六进制转换成十进制 2. 十进制转换成二、八、十六进制 3. 二进制、八进制的互相转换 4. 二进制、十六进制的互相转换 1、二、八、十六进制转换成十进制 方法:数码乘以相应权之和 例(HloJ-l/25+lx24+l/23+0/22+ h2:+h20 -(59)10 例(136)8=lx82+3x8l+6x8°=(94)10 例(1F2^)1S=1X163+15X16S +2\16] + 10/16° = (7978)10 2、十进制转换成二、八、十六进制 方法:连续除以基,直至商为0,从低到高记录余数

例把十进制数159转换成八进制数 8| 19 8辽 (159)IO =(237)8 例把十进制数59转换成二进制数 (59)IO =(111O11)2 2 余余余余余余 8 159

例把十进制数459转换成十六进制数 u | 1| C| B (459)io=(1CB)ib ' 3、二进制、八进制的互相转换 方法: *二进制转换成八进制:从右向左,每3位一组(不足3位左补0),转换成八进制*八进制转换成二进制:用3位二进制数代替每一位八进制数 例(1101001)2=(001,101,001)2=(151)8 例(246)8=(010,100,110)2=(10100110)2 4、二进制、十六进制的互相转换 方法: 二进制转换成十六进制:从右向左,每4位一组(不足4位左补0),转换成十六进制 *十六进制转换成二进制:用4位二进制数代替每一位十六进制数 例(11010101111101)2=(0011,0101,0111,1101)2=(357D)16 例(4B9E)16=(0100,1011,1001,1110)2=(100101110011110)2 三、各种进制数的运算 方法:逢满进具体计算与平时十进制的计算类似,以十六进制为例: 加法:

什么是进制以及进制的转换

1、什么是进制 十进制就是逢十进一:0~9 二进制就是逢二进一:0~1 十六进制。。。:0~9、A~F(可以理解成10~15) 生活中用到进制的例子: 一周七天:七进制 一年十二个月:十二进制 一小时六十分钟:六十进制 电脑中的数据: 二进制 进制的转换 八进制转十进制:八进制0235转为十进制157十六进制转十进制也差不多 83 8281 80 ↓↓↓↓ 0 2 3 5 0+2×64+3×8+5×1 157 十进制转八进制:十进制27转为八进制33 十进制转六十进制也差不多 8|27 3 8|4 3 反正记住一般,低进制转高进制,就乘加,高进制转低进制,就取余, 除十六进制,我们经常用的就是这四种进制 二进制到十六进制转换 方法:从右向左,四位一段,分别转化,不够四位的补零 意思就是一位十六进制用四位二进制数表示,如果不够四位,前面用零补齐 比如116 = 00012十六进制的1和二进制1 表示形式就是1,不过一般用前面的那种方法表示便于运算 例:01011102→(0010,1110) 左补一个零,便于运算 (2 ,E )16 十六进制转二进制 D2C16= (13 ,2 ,12)16 (1101,0010,1100) = 1101001011002中间那段四位二进制数前面补的两个0不能掉而八进制就是三位一段,类似上方,不过就是三位一段 例: 01011102= (000,101,110) 第一段三位二进制数左补两个零 (0, 5, 6) 0568 321= (3,2,1) (011,010,001) 110100012 不存在十六进制与八进制的直接相互转化,都是以二进制or 十进制等为中间进制来进行转换的 如:D2C16= 1101001011002= 64548 二进制与十进制的相互转化,不需要让二进制以多位为一段,只需要一位一位的算就好 其他进制也一样

二进制与计算机教学设计说明

教学设计:《二进制与计算机》 一、教材分析 本内容选自广州市教育局教学研究室2013年新编的《信息技术》初中第一册第一章《信息与信息技术》中第3节《计算机的基本工作原理》中的第二小节。二进制是计算机工作的基本形式,也是计算机理论知识中的最基本的原理,对于信息技术的学习及了解计算机的工作原理具有不可忽视的奠基作用。原教材以一小节的篇幅介绍二进制,只解答了计算机为什么要采用二进制,语焉不详,内容也相对抽象不易理解,难以引起学生的兴趣和重视。有鉴于此,笔者单独以一课时的时间介绍这一相关知识。 二、教学对象分析 本课教学对象为初一的学生。初一的学生活泼好动,但其逻辑思维能力和抽象思维能力相对较弱,对于二进制的工作原理不一定能够直观地理解,所以,笔者在教学设计中,以活动为主线,环环相扣,让学生在游戏中不断体悟二进制的妙用。 三、教学目标 (一)知识与技能:学会二进制数与十进制数之间的转化,认识计算机表示字符的原理,认识计算机描述图片的原理。 (二)过程与方法:通过模拟活动体会到计算机对字符的表示方法,通过设计图形编码了解计算机对图像的表示方法。 (三)情感态度价值观:学会相互之间的合作和沟通,了解二进制原理在计算机中和生活中的应用,激发其创新思考的乐趣。 四、重点难点分析 教学重点:二进制与十进制的转换 教学难点:二进制对字符的表示 五、教学手段 讲授法、游戏法 教学环节 教学活动 设计意图教师活动学生活动 导入展示4张牌,第一张牌上有1个点,第二张 牌上有2个点,第三张牌上有4个点,第4 张牌上有8个点,让学生观察规律,说出第 5张牌有多少个点?其规律是什么? (第i张牌的点数是2i-1 ) 观察牌,总结 规律 题目简单有 趣,能够在短 时间内吸引学 生的注意力。 而且每张牌的 点数隐含着二 进制位数的 权,为正式介 绍二进制做好 铺垫。

进制转换程序设计

课程设计 题目不同数制的数据相互转换程序的 设计 学院计算机科学与技术 专业计算机科学与技术 班级计算机0605班 姓名余欢欢 指导教师刘传文 2009 年 1 月15 日 附件2:

课程设计任务书 学生姓名:余欢欢专业班级:计算机0605班 指导教师:刘传文工作单位:计算机科学与技术学院 题目: 初始条件: 理论:学完“汇编语言程序设计”、“课程计算机概论”、“高级语言程序设计”和“数字逻辑”。 实践:计算机学院科学系实验中心提供计算机和软件平台。如果自己有计算机可以在其上进行设计。 要求完成的主要任务:(包括课程设计工作量及其技术要求,以及说明书撰写等具体要求) (1)输入二进制,十六进制,十进制的无符号数,将它们转换成不同进制的形式,并且输出出来。 (2)程序应有操作提示、输入和输出,界面追求友好,最好是菜单式的界面。 (3)设计若干用例(测试数据),上机测试程序并分析(评价)所设计的程序。 (4)设计报告格式按附件要求书写。课程设计报告书正文的内容应包括: 在正文第一行写课程设计题目; 1.需求说明(要求、功能简述)或问题描述; 2.设计说明(简要的分析与概要设计); 3.详细的算法描述; 4.源程序与执行结果(含测试方法和测试结果); 5.使用说明; 6.总结,包括设计心得(设计的特点、不足、收获与体会)和展望(该 程序进一步改进扩展的设想)。 时间安排: 设计时间一周:周1:查阅相关资料。 周2:系统分析,设计。 周3~4:编程并上机调试。 周5:撰写课程设计报告。 设计验收安排:20周星期五8:00起到计算机学院科学系实验中心进行上机验收。 设计报告书收取时间:20周的星期五下午5:00之前。 指导教师签名: 2009年1月9日 系主任(或责任教师)签名: 2009年1月 9日

二进制及其转换教案

二进制及其转换 [教学目标] 1、认知目标 (1)掌握进位制概念; (2)理解进制的本质; (3)掌握十进制和二进制的相互转换; (4)了解计算机所采用的数制及计算机采用二进制数的原因。 2、技能目标 掌握二进制数和十进制数转换以及运算规则。 3、能力目标 对学生思维能力进行拓展,激发他们探索计算机奥秘的欲望。 [教学重点] (1)进制的本质组成 (2)十进制与二进制间的相互转换 [难点] (1)进制的本质组成 (2)十进制与二进制间的相互转换 [教学方法] 讲授法举例法 [授课地点] 普通教室,不用多媒体 [教学过程] 一、引入新课 对计算机稍微了解的同学就知道计算机中使用的进位制是二进制,那什么是二进制,它跟我们数学上使用的十进制有什么联系。这节课准备给大家补充点二进制的知识,这跟数学关系很密切,请同学务必认真听课。 二、切入课堂内容 1、什么是进位制 提出问题:什么是进位制?最常见的进位制是什么? 学生普遍回答是十进制。 教师继续提问:那十进制为什么叫十进制?引起学生的思考。(部分经过思考的学生回答是约定的) 教师提醒学生一起回忆幼儿园开始学习算术的情景。 当是我们是从最简单的个位数相加学起,比如2+3=?,当时我们会数手指,2个手指+3个手指等于5个

手指,答案为5。 那4+6呢?4个手指+6个手指等于10个手指,10个手指刚好够用。 那6+9呢?当时我们就困惑了。记得当时老师是告诉我们把6拆成1+5,9+1=10,这时老师跟我们约定用一个脚趾表示10,另外用5个手指表示5。这样通过脚趾,我们就成功解决了两个数相加超过10的问题。 教师提问:那当时我们为什么要约定10呢,为什么用9或11?引起学生思考。(部分经过思考的学生回答为了方便运算) 教师提问:除此之外还有哪些常见的进位制?请举例说明。拓展学生的思维。 有学生回答60进制(时分秒的换算),360进制(1周=360度),二进制等等。 教师和学生一起归纳进位制的概念,学生和老师形成共识: 进位制是人们为了计数和运算方便而约定的记数系统。 2、什么是十进制? 教师提出问题:大家学习了十几年十进制,我们了解十进制吗?所谓的十进制,它是如何构成的? 引起学生思考。 十进制由三个部分构成: (1)由0、1、2、3、4、5、6、7、8、9十个数码组成; (2)进位方法,逢十进一;(基数为10) (3)采用位权表示法,即一个数码在不同位置上所代表的值不同。 引入基数和位权的概念 一种进制就规定了一组固定的数字,数字的个数就是这种类制的基数,如十进制规定了,0,1,2…9共10个数字,则十进制的基数就为10。 位权是一个比较新的概念,通过简单的例子介绍什么是位权。 比如:数码3,在个位上表示为3,在十位表示为30,在百位表示为300,在千位表示为3000。 3333=3000+300+30+3=3*103+3*102+3*101+3*100 这里个(100)、十(101)、百(102),称为位权,位权的大小是以基数为底,数码所在位置序号为指数的整数次幂。 教师提出问题:其它进位制的数又是如何的呢?引入二进制。 3、什么是二进制? 从生活最常用的十进制入手,讲解基数和位权的概念,学生理解后,引入二进制数的概念,在对二进制数进行介绍时,会把学生带入到一个全新的数字领域。 (1)二进制的表示方法(同样由三部分组成) ①由0、1两个数码来描述。如11001,记为11001(2)或者(11001)2 ②进位方法,逢二进一;(基数为2) ③位权大小为2-n ...、2-1、20、21、22...2n 比如 01234(2)2 12020212111001?+?+?+?+?=

数据结构课程设计报告-进制转换

课程设计报告 设计题目:进制转换问题 学生姓名: 专业:信息安全 班级:信息安全10-02 学号: 指导教师: 完成日期:2011年12月 课程设计报告的内容及要求 一、问题描述: 任意给定一个M进制的数x ,请实现如下要求: 1、求出此数x的10进制值(用MD表示) 2、实现对x向任意的一个非M进制的数的转换 3、至少用两种或两种以上的方法实现上述要求(用栈解决,用数组解决,其它方法解决)软件环境:Vc6.0编程软件 二、实验环境 运行平台:Win32 硬件:普通个人pc机 软件环境:VC++6.0编程软件 三、解决办法: 1、用数组实现该问题: ten_else()函数是实现十进制转换为其它进制的函数,先设置一个while循环,当十进制数g等于零时停止,再将输入的十进制数x取首先对需要转换的进制M取余,然后再对其取整,并将所得的余数依次存入一个数组中,然后逆向取出数组中的元素,即得到转换后的结果。将其他进制M转换为十进制,并将其转换为非M进制数是在主函数中实现的。M进制转十进制则是从该M进制数的最后一位开始算,依次列为第0、1、2…n位并分别乘以M 的0、1、2…n次方,将得到的次方相加便得到对应的十进制数,再调用ten_else()函数将其转换为非M进制的数。实际上十进制起到了一个桥梁作用。 2、用栈实现该问题: 与数组方法核心思想相同,stack定义栈,初始化一个空栈,然后判断是否为空,接着是去栈顶元素(用z表示栈顶元素),数据入栈,出栈的操作。栈具有后进先出的性质,故其用s.pop()取数较数组的逆向取数较为方便,体现了栈的优越性。

四、设计和编码的回顾讨论和分析 (1)函数ten_else()的作用体现在将任意10进制数转换为非10进制数,程序能实现1~16进制的相互转换。在10进制以上的数需要用字母表示,由此设计了switch函数,当出现余数大与10的情况可以调用相应的字母。考虑到最终结果是所求余数的倒序,添加新的整型变量j,通过一个for循环实现倒序。 (2)编程初期设计了else_ten函数,后几经修改将其融入main函数中较为直观。 (3)当输入10进制以下的数向10进制转换时候较为简单,程序中设计char型数组s[maxnum]来统计所输入数据的位数,不需要用户输入。在求10进制的时候通过for循环求一个累和即可。 (4)当输入10进制以上的数设计字母较为复杂,通过对ASCⅡ表的理解设计程序。 (5)在用栈法实现非10进制向10进制转换的时候遇到了些麻烦,当输入8A的时候程序将8当成字符类型,将其编译为数字56,导致最终转换结果出现错误。于是通过查阅ASCⅡ表对程序做出了修正,设计了条件语句if(z<=57)z-=48;if(z>=65){z-=65;z+=10;} 五、程序框图 六、经验和体会 (1)我们在写程序的时候要多角度考虑问题,比如题目中要求栈法与数组方法同时去实现进制转换问题。在编译过程中我们可以将特殊的问题逐渐的化为一般问题,比如10进制转换到16进制是,我举的例子是200转换为C8。 (2)通过此次课程设计的考验,让我们回顾了算法与数据结构这门课的主要内容。掌握了如何分别用数组和栈来实现数据存储与转换,加深了对栈的掌握和操作,以及栈先进后出的特点。 (3)在程序的调试初期,我们遇到了许多问题,暴露了对编译软件不熟悉的弊端,如设置断

二进制、八进制、十进制、十六进制之间转换(含小数部分)

二进制、八进制、十进制、十六进制之间转换 一、十进制与二进制之间的转换 (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这样一直乘下去,最后不可能得到小数部分为零,因此,这个时候只好

二进制和十进制转换教案(学生版)

二进制和十进制转换教案 姓名分数家长评议 冒险 英格:“如果你完全不冒险去做,其实是冒了更多的险。” 再平凡的人们都有他独特的理想,再困顿的生活都有他光采的价值,不需要羡慕功成名遂的人,他们年少也曾经不知所措,你想从他们身上获得秘诀,他只会老实告诉你:“放手去实现你的理想!” 有两个年轻人,去求助一位老人,他们问着相同的问题:“我有许多的理想和抱负,总是笨手笨脚,不知道何时才能实现。” 老人只给他们一人一颗种子,细心的交代着:“这是一颗神奇的种子,谁能够妥善的把它保存下来,就能够实现你的理想。” 几年后,老人碰到了这两个年轻人,顺道问起种子的情况。 第一个年轻人,谨慎的拿着锦盒,缓缓地掀开里头的棉布,对着老人说:“我把种子收藏在锦盒里,时时刻刻都将它妥善的保存着。” 老人示意的点着头,接着第二个年轻人,汗流浃背的指着那座山丘:“您看,我把这颗神奇种子,埋在土里灌溉施肥,现在整座山丘都长满了果树,每一棵果树都结满了果实。” 老人关切垂爱的说着:“孩子们,我给的并不是什么神奇的种子,不过是一般的种子而已,如果只是守着它,永远不会有结果,只有用汗水灌溉,才能有丰硕的成果。” 不晓得谁说的,人类因为有梦想而显得伟大,也因为有了梦想而产生不凡。我倒觉得可以这么修改,生命因为有了理想而呈现伟大,生活因为有了实践而变得不凡。有了理想可以让你产生伟大的抱负,有了实践可以让你变得楚楚不凡。 如果种子有了神奇的力量,没有接触土壤,没有灌溉耕耘,没有精心栽培,最多也不过是一颗普通种子,一点也神奇不起来。 你想写出的话是。 【运河通道1】进制 基数:基数是指一种进制中组成的基本数字,也就是不能再进行拆分的数字。二进制是0和1;八进制是0-7;十进制是0-9;十六进制是0-9+A-F(大小写均可)。也可以这样简单记忆,假设是n进制的话,基数就是【0,n-1】的数字,基数的个数和进制值相同,二进制有两个基数,十进制有十个基数,依次类推。 运算规则:运算规则就是进位或错位规则。例如对于二进制来说,该规则是“满二进一,借一当二”;对于十进制来说,该规则是“满十进一,借一当十”。其他进制也是这样。 【关键词】你想说什么? 【运河通道2】二进制 二进制以2为基数,只用0和1两个数字表示数,逢2进一。 二进制与遵循十进制数遵循一样的运算规则,但显得比十进制更简单。例如:

(c语言程序设计)10进制数转化为其它进制数

//用顺序栈来实现进制转换 #include #include #include #include #define STACK_INIT_SIZE 100 //存储空间初始分配量 #define STACKINCREMENT 10 //存储空间分配增量 typedef int SElemType; typedef int Status; typedef struct { SElemType *base; SElemType *top; int stacksize; //栈容量 }SqStack; SqStack S; Status InitStack(SqStack &S){ //构造一个空栈 S.base=(SElemType *)malloc(STACK_INIT_SIZE *sizeof(SElemType)); if(!S.base) exit(0); //存储空间失败 S.top=S.base; S.stacksize=STACK_INIT_SIZE; return 0; } Status GetTop(SqStack S,SElemType &e) //若栈不为空,则用e返回S的栈顶元素,并返回0,否则返回1 { if(S.top==S.base) return 1; e=*(S.top-1); return 0; } Status Push(SqStack &S ,SElemType e) //插入元素e为新的栈顶元素 { if(S.top-S.base>=S.stacksize) //如果栈满,则追加存储空间 { S.base=(SElemType *)realloc (S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType)); if(!S.base) return 1 ; //存储分配失败 S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT;

最新中职数学授课教案:数制转换数学

《数制转换》教案 教学目标: 【知识目标】 1、理解进制的含义。 2、掌握二进制、十进制、八进制、十六进制数的表示方法。 3、掌握二进制、八进制、十六进制数转换为十进制的方法。 4、掌握十进制整数、小数转换为二进制数的方法。 【技能目标】 1、培养学生逻辑运算能力。 2、培养学生分析问题、解决问题的能力。 3、培养学生独立思考问题的能力。 4、培养学生自主使用网络软件的能力。 【情感目标】 通过练习数制转换,让学生体验成功,提高学生自信心。 教学重点: 1、各进制数的表示方法。 2、各进制数间相互转换的方法。 教学难点: 十进制整数、小数转换为二进制数的方法。 学法指导: 教师讲授、学生练习、教师总结、教师评价。 教学基础: 学生基础: 学生只学习了“计算机基础”一章的“计算机产生和发展”一节。 设备基础: 硬件:多媒体网络机房;教师机一台;学生机每人一台;大屏幕投影;教师机与学生机之间互相联网。 教学过程: 一、新课导入

我们日常生活中使用的数是十进制、十进制不是唯一的数的表示方法,表示数的数制还有哪些呢?这些数制与十进制间有什么关系呢?这节课我们就来学习数制。 二、新课讲解 1、数制 数制的表示方法:为了区别不同进制数,一般把具体数用括号括起来,在括号的右下角标上相应表示数制的数字。 举例:(101) 2与(101) 10 基数:所使用的不同基本符号的个数。 权:是其基数的位序次幂。 ①十进制、二进制、十六进制、八进制的概念 (1)十进制(D):由0~9组成;权:10i;计数时按逢十进一的规则进行;用(345.59)10 或345.59D表示。 (2)二进制(B):由0、1组成;权:2i;计数时按逢二进一的规则进行;用(101.11)2 或101.11B表示。 (3)十六进制(H):由0~9、A~F组成;权:16i;计数时按逢十六进一的 规则进行;用(IA.C) 16 或IA.CH表示。 (4)八进制(Q):由0~7组成;权:8i;计数时按逢八进一的规则进行; 用(34.6) 8 或34.6Q表示。 总结:不同数制的表示方法有两种,一种是加括号及数字下标,另一种是数字后加相应的大写字母D、B、H、Q。 ②按权展开基本公式: 设一个基数为R的数值N,N=(d n-1d n-2 …d 1 d d -1 …d -m ),则N的展开为:N=d n-1 ×R n-1+d n-2×R n-2+…+d 1 ×R1+d ×R0+d -1 ×R-1+…+d -m ×R-m。 说明:(d n-1d n-2 …d 1 d d -1 …d -m )表示各位上的数字,R i为权。 例如:十进制数2345.67展开式为:2345.67=2×103+3×102+4×101+5×100+6×10-1+7×10-2 2、n进制转换为十进制的方法 n进制转换为十进制的方法:按权展开法(将n进制数按权展开相加即可得

各种进制之间的转换方法

各种进制之间的转换方法 ⑴二进制B转换成八进制Q:以小数点为分界线,整数部分从低位到高位,小数部分从高位到低位,每3位二进制数为一组,不足3位的,小数部分在低位补0,整数部分在高位补0,然后用1位八进制的数字来表示,采用八进制数书写的二进制数,位数减少到原来的1/3。 例:◆二进制数转换成八进制数: = 110 110 . 101 100B ↓↓ ↓ ↓ 6 6 . 5 4 = ◆八进制数转换成二进制数: 3 6 . 2 4Q ↓ ↓ ↓ ↓ 011 110 . 010 100 = ◆ 低位,每4位二进制数为一组,不足4位的,小数部分在低位补0,整数部分在高位补0,然后用1位十六进制的数字来表示,采用十六进制数书写的二进制数,位数可以减少到原来的1/4。 例:◆二进制数转换成十六进制数: .100111B = 1011 0101 1010 . 1001 1100B ↓ ↓ ↓ ↓ ↓ B 5 A . 9 C = 5A ◆十六进制数转换成二进制数: = A B . F EH ↓ ↓ ↓ ↓ 1010 1011. 1111 1110 = .1111111B 先把八进制数Q转换成二进制数B,再转换成十六进制数H。 例:◆八进制数转换成十六进制数: = 111 100 000 010 . 100 101B = .100101B = 1111 0000 0010 . 1001 0100B = F 0 2 . 9 4H = ◆十六进制数转换成八进制数: = 0001 1011 . 1110B = = 011 011 . 111B = 3 3 . 7Q = ⑷二进制数B转换成十进制数D:利用二进制数B按权展开成多项式和的表达式,取基数为2,逐项相加,其和就是相应的十进制数。

相关文档
最新文档