二进制到ASCII码的转换(精)
计算机导论-5-二进制-进制计算-编码

【计导非课系列】第五节二进制进制计算编码对于计算机来说,数字只有两个——0和1。
数据对于计算机来说是相当重要的,而电路的通断两种状态决定了计算机只能通过1和0来进行一切事情的处理。
所以,我们见到的计算机的一切都是通过二进制才能呈现出来的。
这次就会着重介绍一下进制的计算和编码。
博文目录•什么是数据•数的进制•二进制•进制的转换•逻辑运算•计算机对数据的处理•常用编码•数的表示•符号数的机器码表示before we start…计算机为什么采用二进制?计算机中,数是用物理器件的状态表示的,二进制只有两种状态,0和1,容易用电路表示。
二进制规则简单,容易用数字逻辑电路实现。
二进制还可以表示逻辑值,进行逻辑计算。
To say it simply, 这本来就是电路决定的。
而这样一决定之后,正好带来了许多好处:比如0代表假的,没发生过的;比如所有数字只有两种状态,便于管理,写起来程序还方便……总之,二进制就是强!自动计算要解决的问题数据的存储、表示、运算,以及自动执行的计算模型计算机主要技术指标•字长:计算机一次存取传递或加工的数据长度。
也就是系统是多少位的。
•主存容量:内存(主存储器)所能存储的二进制容量,主存越大,交换越少,处理速度越快。
•计算机指令执行速度:(MIPS),每秒钟执行加减法有几百万次,可以通过时钟频率间接估计。
•时钟周期(频率、主频)CPU主频速度:CPU在单位时间内发出的脉冲数。
•数据输入/输出最高速率:计算机的数据吞吐量。
例题:下面的特点分别对应哪些技术指标?数据什么是数据数据:反应客观世界事物属性的原始记录。
需要对数据做什么•存储数据:数据怎样做才能被记到计算机上?用0和1。
•组织数据:怎样存储这些0和1对我最有用?数据结构。
存储容量单位换算在计算机里面,“千”不是所谓的103,而是210!也就是1024。
存储容量指的是存储器有多少个存储单元。
最基本的存储单元是位,bit,可以存放1个0或者1。
进制转换计算+ASCII表

一、二进制转化成其他进制1. 二进制(BINARY)——>八进制(OCTAL)例子1:将二进制数(10010)2转化成八进制数。
(10010)2=(010 010)2=(2 2)8=(22)8例子2:将二进制数(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)例子1:将二进制数(10010)2转化成十进制数。
(10010)2=(1x24+0x23+0x22+1x21+0x20)10=(16+0+0+2+0)10=(18) 10例子2:将二进制数(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)例子1:将二进制数(10010)2转化成十六进制数。
(10010)2=(0001 0010)2=(1 2)16=(12) 16例子2:将二进制数(0.1010)2转化为十六进制数。
(0.10101)2=(0. 1010 1000)2=(0. A 8)16=(0.A8)16诀窍:因为每四位二进制数对应一位十六进制数,所以,以小数点为界,整数位则将二进制数从右向左每4位一隔开,不足4位的在左边用0填补即可;小数位则将二进制数从左向右每4位一隔开,不足4位的在右边用0填补即可。
二进制,十进制,十六进制,ASCII,BCD码的转换,单片机

1.在片内RAM 30H单元有-个8位二进制数,将其转换成压缩BCD码,存于片内RAM 41H(高位)40H(低位)中。
方法:2^8=256,所以8位二进制A<=256,A/100商是百位数,存放到41h单元,余数再除以10,再得商是10位数,高低位互换,) ORG 0100HSTART:MOV A,30H ;取来8位二进制数MOV B,#100DIV AB ;除以100MOV 41H,A ;商是百位数,存放到41h单元MOV A,B ;取回余数MOV B,#10DIV AB ;再除以10SWAP A ;商是10位数,高低位互换ORL A,BMOV 40H,A ;将十位数与个位位数存入40hSJMP $END2.一个字节(8位)BCD码转换为二进制数(方法:先将高半字节乘以10,再加上低半字节)设待转换的BCD码存放于R2中DTOB:MOV A,R2ANL A,#0F0HSWAP AMOV B,#0AHMUL ABMOV R3,AMOV A,R2ANL A,#0FHADD A,R3RET3.二进制数转换为ASCII码设(30H)=4BH,将高4位的ASCII码放在31H单元,低4位的ASCII码放在32H单元,程序具有通用性,向入口参数30H存入任何数,都能将其变成相应的ISCII 码.ORG 0000HLJMP MAINORG 0030HMAIN:MOV SP,#60HMOV 30H,#4BHMOV R2,30HMOV A,R2ANL A,#0FHCJNE A,#0AH,NEQNEQ: JC LOOPADD A,#37HJMP LOOP3LOOP:ADD A,#30HLOOP3:MOV 31H,AMOV A,R2SWAP AANL A,#0FHCJNE A,#0AH,NE1NE1: JC LOOP1ADD A,#37HJMP LOOP4LOOP1:ADD A,#30HLOOP4:MOV 32H,AA1: SJMP A1END4.已知R0的低半个字节为一个四位的二进制数,要求将其转换为ASCAII码后送回R0中。
ASCII码值对照表

最全ASCII码对照表ASCII码值对照表ASCII码值ASCII码中英文对照表0010 0000 32 20 空格0010 0001 33 21 !0010 0010 34 22 "0010 0011 35 23 #0010 0100 36 24 $0010 0101 37 25 %0010 0110 38 26 &0010 0111 39 27 '0010 1000 40 28 (0010 1001 41 29 )0010 1010 42 2A *0010 1011 43 2B +0010 1100 44 2C ,0010 1101 45 2D -0010 1110 46 2E .0010 1111 47 2F /0011 0000 48 30 00011 0001 49 31 10011 0010 50 32 20011 0011 51 33 30011 0100 52 34 40011 0101 53 35 50011 0110 54 36 60011 0111 55 37 70011 1000 56 38 80011 1001 57 39 90011 1010 58 3A :0011 1011 59 3B ;0011 1100 60 3C <0011 1101 61 3D =0011 1110 62 3E >0011 1111 63 3F ?0100 0000 64 40 @0100 0001 65 41 A0100 0010 66 42 B0100 0011 67 43 C0100 0100 68 44 D0100 0101 69 45 E0100 0110 70 46 F0100 0111 71 47 G0100 1000 72 48 H0100 1001 73 49 I0100 1010 74 4A J0100 1011 75 4B K0100 1100 76 4C L0100 1101 77 4D M0100 1110 78 4E N0100 1111 79 4F O0101 0000 80 50 P0101 0001 81 51 Q0101 0010 82 52 R0101 0011 83 53 S0101 0100 84 54 T0101 0101 85 55 U0101 0110 86 56 V0101 0111 87 57 W0101 1000 88 58 X0101 1001 89 59 Y0101 1010 90 5A Z 0101 1011 91 5B [ 0101 1100 92 5C \ 0101 1101 93 5D ] 0101 1110 94 5E ^ 0101 1111 95 5F _ 0110 0000 96 60 ` 0110 0001 97 61 a 0110 0010 98 62 b 0110 0011 99 63 c 0110 0100 100 64 d 0110 0101 101 65 e 0110 0110 102 66 f 0110 0111 103 67 g 0110 1000 104 68 h 0110 1001 105 69 i 0110 1010 106 6A j 0110 1011 107 6B k 0110 1100 108 6C l 0110 1101 109 6D m 0110 1110 110 6E n 0110 1111 111 6F o 0111 0000 112 70 p 0111 0001 113 71 q 0111 0010 114 72 r 0111 0011 115 73 s 0111 0100 116 74 t 0111 0101 117 75 u 0111 0110 118 76 v 0111 0111 119 77 w 0111 1000 120 78 x 0111 1001 121 79 y 0111 1010 122 7A z 0111 1011 123 7B { 0111 1100 124 7C | 0111 1101 125 7D } 0111 1110 126 7E ~ 0111 1111 127 7F DEL (delete) 删除ESC键VK_ESCAPE (27)回车键:VK_RETURN (13) TAB键:VK_TAB (9)Caps Lock键:VK_CAPITAL (20) Shift键:VK_SHIFT ()Ctrl键:VK_CONTROL (17) Alt键:VK_MENU (18)空格键:VK_SPACE (/32)退格键:VK_BACK (8)左徽标键:VK_LWIN (91)右徽标键:VK_LWIN (92)鼠标右键快捷键:VK_APPS (93) Insert键:VK_INSERT (45) Home键:VK_HOME (36) Page Up:VK_PRIOR (33) PageDown:VK_NEXT (34)End键:VK_END (35) Delete键:VK_DELETE (46)方向键(←):VK_LEFT (37)方向键(↑):VK_UP (38)方向键(→):VK_RIGHT (39)方向键(↓):VK_DOWN (40)F1键:VK_F1 (112)F2键:VK_F2 (113)F3键:VK_F3 (114)F4键:VK_F4 (115)F5键:VK_F5 (116)F6键:VK_F6 (117)F7键:VK_F7 (118)F8键:VK_F8 (119)F9键:VK_F9 (120)F10键:VK_F10 (121)F11键:VK_F11 (122)F12键:VK_F12 (123)Num Lock键:VK_NUMLOCK (144)小键盘0:VK_NUMPAD0 (96)小键盘1:VK_NUMPAD0 (97)小键盘2:VK_NUMPAD0 (98)小键盘3:VK_NUMPAD0 (99)小键盘4:VK_NUMPAD0 (100)小键盘5:VK_NUMPAD0 (101)小键盘6:VK_NUMPAD0 (102)小键盘7:VK_NUMPAD0 (103)小键盘8:VK_NUMPAD0 (104)小键盘9:VK_NUMPAD0 (105)小键盘.:VK_DECIMAL (110)小键盘*:VK_MULTIPLY (106)小键盘+:VK_MULTIPLY (107)小键盘-:VK_SUBTRACT (109)小键盘/:VK_DIVIDE (111)Pause Break键:VK_PAUSE (19)Scroll Lock键:VK_SCROLL (145)注意:1.在ASCII码中,有4组字符:一组是控制字符,如LF,CR等,其对应ASCII码值最小;第2组是数字0~9,第3组是大写字母A~Z,第4组是小写字母a~z。
ASCII码与汉字编码 - 米粒的日志 - 网易博客

5、区位码、国标码与机内码的转换关系 方法 (1)区位码先转换成十六进制数表示 (2)(区位码的十六进制表示)+2020H=国标码; (3)国标码+8080H=机内码 举例:以汉字“大”为例,“大”字的区内码为2083 解:1、区号为20,位号为83 2、将区20,位号83分别转换为十六进制表示为1453H 3、1453H+2020H=3473H,得到国标码3473H 4、3473H+8080H=B4F3H,得到机内码为B4F3H
优点:利用音码的易学性和形码可有效减少重码。 缺点:既要考虑字音,又要考虑字形,比较麻烦。 4、汉字的输出:字形码(字库 Font) (1)点阵字形 A)16?16、24×24、48×48 B)每一个点在存储器中用一个二进制位(bit)存储,所以一个16×16点阵汉字需要32(16×16/8=32)个字 节存储空间。 (2)轮廓字形 把汉字笔画的轮廓用一组直线和曲线勾画,记录的是这些几何形状之间的关系,精度 高,Windows的TrueType字库采用此法。
ASCII码与汉字编码 基础理论
一、ASCII码 1、什么叫ASCII码? 计算机中用二进制数表示字母、数字、符号以及控制符号,目前主要用ASCII码(美国标准信息交换码的缩 写)。 1)常用字符有128个,编码从0到127。 2)控制字符:0~31、127,共33个,不可显示; 3)普通字符:95个,包括10个阿拉伯数字、52个英文大小写字母、33个运算符。 4)每个字符占一个字节,7位,最高位为0。
3、汉字的输入:汉字输入码 (1)数字码(或流水码) 如:电报码、区位码、纵横码 优点:无重码,不仅能对汉字编码,还能对各种字母、数字符号进行编码。 缺点:是人为规定的编码,属于无理码,只能作为专业人员使用。 (2)字音码 如:全拼、双拼、微软拼音 优点:简单易学。 缺点:汉字同音多,所以重码很多,输入汉字时要选字。 (3)字形码 如:五笔字型、表形码、大众码、四角码 优点:见字识码,一般重码率较低,经强化训练后可实现盲打。 缺点:拆字法没有统一的国家标准,拆字难,编码规则繁,记忆量大。 (4)音形码 如:声形、自然码、钱码
ASCII码值对照表

最全ASCII码对照表ASCII码值对照表ASCII码值ASCII码中英文对照表0010 0000 32 20 空格0010 0001 33 21 !0010 0010 34 22 "0010 0011 35 23 #0010 0100 36 24 $0010 0101 37 25 %0010 0110 38 26 &0010 0111 39 27 '0010 1000 40 28 (0010 1001 41 29 )0010 1010 42 2A *0010 1011 43 2B +0010 1100 44 2C ,0010 1101 45 2D -0010 1110 46 2E .0010 1111 47 2F /0011 0000 48 30 00011 0001 49 31 10011 0010 50 32 20011 0011 51 33 30011 0100 52 34 40011 0101 53 35 50011 0110 54 36 60011 0111 55 37 70011 1000 56 38 80011 1001 57 39 90011 1010 58 3A :0011 1011 59 3B ;0011 1100 60 3C <0011 1101 61 3D =0011 1110 62 3E >0011 1111 63 3F ?0100 0000 64 40 @0100 0001 65 41 A0100 0010 66 42 B0100 0011 67 43 C0100 0100 68 44 D0100 0101 69 45 E0100 0110 70 46 F0100 0111 71 47 G0100 1000 72 48 H0100 1001 73 49 I0100 1010 74 4A J0100 1011 75 4B K0100 1100 76 4C L0100 1101 77 4D M0100 1110 78 4E N0100 1111 79 4F O0101 0000 80 50 P0101 0001 81 51 Q0101 0010 82 52 R0101 0011 83 53 S0101 0100 84 54 T0101 0101 85 55 U0101 0110 86 56 V0101 0111 87 57 W0101 1000 88 58 X0101 1001 89 59 Y0101 1010 90 5A Z 0101 1011 91 5B [ 0101 1100 92 5C \ 0101 1101 93 5D ] 0101 1110 94 5E ^ 0101 1111 95 5F _ 0110 0000 96 60 ` 0110 0001 97 61 a 0110 0010 98 62 b 0110 0011 99 63 c 0110 0100 100 64 d 0110 0101 101 65 e 0110 0110 102 66 f 0110 0111 103 67 g 0110 1000 104 68 h 0110 1001 105 69 i 0110 1010 106 6A j 0110 1011 107 6B k 0110 1100 108 6C l 0110 1101 109 6D m 0110 1110 110 6E n 0110 1111 111 6F o 0111 0000 112 70 p 0111 0001 113 71 q 0111 0010 114 72 r 0111 0011 115 73 s 0111 0100 116 74 t 0111 0101 117 75 u 0111 0110 118 76 v 0111 0111 119 77 w 0111 1000 120 78 x 0111 1001 121 79 y 0111 1010 122 7A z 0111 1011 123 7B { 0111 1100 124 7C | 0111 1101 125 7D } 0111 1110 126 7E ~ 0111 1111 127 7F DEL (delete) 删除ESC键VK_ESCAPE (27)回车键:VK_RETURN (13) TAB键:VK_TAB (9)Caps Lock键:VK_CAPITAL (20) Shift键:VK_SHIFT ()Ctrl键:VK_CONTROL (17) Alt键:VK_MENU (18)空格键:VK_SPACE (/32)退格键:VK_BACK (8)左徽标键:VK_LWIN (91)右徽标键:VK_LWIN (92)鼠标右键快捷键:VK_APPS (93) Insert键:VK_INSERT (45) Home键:VK_HOME (36) Page Up:VK_PRIOR (33) PageDown:VK_NEXT (34)End键:VK_END (35) Delete键:VK_DELETE (46)方向键(←):VK_LEFT (37)方向键(↑):VK_UP (38)方向键(→):VK_RIGHT (39)方向键(↓):VK_DOWN (40)F1键:VK_F1 (112)F2键:VK_F2 (113)F3键:VK_F3 (114)F4键:VK_F4 (115)F5键:VK_F5 (116)F6键:VK_F6 (117)F7键:VK_F7 (118)F8键:VK_F8 (119)F9键:VK_F9 (120)F10键:VK_F10 (121)F11键:VK_F11 (122)F12键:VK_F12 (123)Num Lock键:VK_NUMLOCK (144)小键盘0:VK_NUMPAD0 (96)小键盘1:VK_NUMPAD0 (97)小键盘2:VK_NUMPAD0 (98)小键盘3:VK_NUMPAD0 (99)小键盘4:VK_NUMPAD0 (100)小键盘5:VK_NUMPAD0 (101)小键盘6:VK_NUMPAD0 (102)小键盘7:VK_NUMPAD0 (103)小键盘8:VK_NUMPAD0 (104)小键盘9:VK_NUMPAD0 (105)小键盘.:VK_DECIMAL (110)小键盘*:VK_MULTIPLY (106)小键盘+:VK_MULTIPLY (107)小键盘-:VK_SUBTRACT (109)小键盘/:VK_DIVIDE (111)Pause Break键:VK_PAUSE (19)Scroll Lock键:VK_SCROLL (145)注意:1.在ASCII码中,有4组字符:一组是控制字符,如LF,CR等,其对应ASCII码值最小;第2组是数字0~9,第3组是大写字母A~Z,第4组是小写字母a~z。
进制转换(附ASCII码表)

一、十进制与二进制之间的转换二、 (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入。
码制转换十二进制数ASCII码之间的互相转换BCD

MOV SS,AX
MOV SP,TOP
LEA BX,STRING ;取变量偏址
PUSH BX
;将偏址压栈
PUSH NUM
;将变量压栈
堆栈
AF 25 02 00
0060H 0062H 0064H
26
CALL BINHEX
;(SP)=005EH
CS:0113 LEA DX,STRING ;(DX)=0002H
;若(CL)=0,转NEXT2 ;取字符 ;转换成BCD码 ;加到中间结果上
10
MOV MUL INC JMP NEXT2: MOV AND ADD CMP JNZ NEG NEXT3: MOV RET
DX,10 DX BX SHORT LP1 DL,[BX] DL,0FH AX,DX CH,’-’ NEXT3 AX [DI],AX
(AX)+1000(AX) DL存至缓冲区 令(DL)=0
求100的个数,结构同上
A
(AX)-10
Y
<0?
N
(DL)+1
(AX)+10(AX) 存DL 存AL
返回DOS
15
汇编程序如下:
DATA SEGMENT BNUM DB 270FH DNUM DB 4 DUP(?) ;存放BCD码的缓冲区 DATA ENDS CODE SEGMENT
STR1
0A
02
32
36
0D …
STR2
0A
02
33 33
0D …
NUM
1A
00
21
00
SUM
3B
00
OVER
‘O’
…
…