1、3.1 数据编码数据编码(二)(二) 【教学目标】 理解信息编码的原理理解信息编码的原理 掌握进制及其之间的转掌握进制及其之间的转换换 理解数据编码的意义和作用。理解数据编码的意义和作用。 【教学重点】认识二进制,了解文本的编码 。 【教学难点】二进制及与其他进制之间的转换。 【游戏导入游戏导入】卡片卡片组合游戏组合游戏 【玩中做玩中做 做中思做中思】 0.0.数数1 1,2 2,4 4,8 8,1616构成什么数列?公比是多少?构成什么数列?公比是多少? 1.1.用这用这5 5张卡片,最大能表示的十进制数是多少张卡片,最大能表示的十进制数是多少(等比数列部分和)?(等比数列部分和)? 若用二
2、进制数表示,是多少?如何分别表示十进制数的若用二进制数表示,是多少?如何分别表示十进制数的0 0,1 1,2 2,3 3,? 2.2.如果要表示更大的数,怎么办?例如:如果要表示更大的数,怎么办?例如:255.255. 3.3.现有现有255255个相同的苹果,事先分装成若干袋,每袋装若干个苹果,当用个相同的苹果,事先分装成若干袋,每袋装若干个苹果,当用 户来买苹果时,无论他要多少个(户来买苹果时,无论他要多少个(0,2550,255之内之内),都可以不拆开袋子,直),都可以不拆开袋子,直 接选取几个袋子给他。那么事先应该怎样装袋?接选取几个袋子给他。那么事先应该怎样装袋?有多少种装袋方案?有
3、多少种装袋方案?如果他如果他 要要100100个苹果,则应给他哪几袋?个苹果,则应给他哪几袋? 【思考】二进制与数制转换 把两图关联起来看: 二进制数二进制数01001所表示的数的所表示的数的含义含义: 1 1* *1+01+0* *2+02+0* *4+14+1* *8+08+0* *16=116=1* *2 20 0+0+0* *2 21 1+0+0* *2 22 2+1+1* *2 23 3+0+0* *2 24 4=9=9 其中其中20,21,22,23,24,称为二进制整数从右到左各位的权值,称为二进制整数从右到左各位的权值, 2是二进制数的基数。二进制数有是二进制数的基数。二进制数
4、有且仅有且仅有2种不同的数字:种不同的数字:0和和1,基,基 本计数规则是逢二进一,即本计数规则是逢二进一,即1+1=10. 一、数值型数据一、数值型数据( (非负整数非负整数) )的编码的编码 【思考】进制转换 十进制数特点: 如2019(10)=9*100+1*101+0*102+2*103=2019,十进制数的基数是 10,十进制整数从右到左各位的权值依次是100,101,102,103, 十进制数有10种不同的数字:0,1,2,9,基本计数规则是逢十进 一,即9+1=10. 十六进制特点: 对于十六进制数来讲,其基数是16,要有16种不同的数字,除了0,1, 2,9,还需补充6个符号,
5、一般用AF(af),分别相当于十进制 数的1015。基本计数规则是逢十六进一,即F+1=10. 十六进制整数 从右到左各位的权值依次是160,161,162,163,.例如十六进制整 数2F3D(16)=D(13)*160+3*161+F(15)*162+2*163=12093 数制数制只是表示数的一种方法,同一个数值用任何数制表示都是一样只是表示数的一种方法,同一个数值用任何数制表示都是一样 的,我们数学中都是采用十进制,计算机内部信息的表示是采用二进的,我们数学中都是采用十进制,计算机内部信息的表示是采用二进 制制。 1.使计算自动化成为可能。二进制,只有0和1两个状态,具有2个稳定 状态
6、的电子器件很多,如开关的接通和断开,晶体管的导通和截止、磁 元件的正负剩磁、电位电平的高与低等都可表示0、1两个数码。 2.使自动化计算装置简便可靠。二进制数的运算法则少,运算简单,使 计算机运算器的硬件结构大大简化(十进制的乘法九九口诀表55条公 式,而二进制乘法只有4条规则)。 3.使自动化逻辑运算简单易行。由于二进制0和1正好和逻辑代数的假 (False)和真(True)相对应,有逻辑代数作为理论基础,用二进制 能很方便地进行逻辑运算。 基于这3条,计算机系统采用二进制。 二进制的特点 1.用二进制表示一个数时,位数太多,太繁琐。故有16进制。 2.难于记忆,可读性差。所以,与人类交互时
7、,计算机系统已经尽量隐藏了二 进制的内核了,尽可能人性化了(数值则已自动转为十进制了)。 优点: 缺点: 【练】填写下表,熟悉巩固 十进制二进制十六进制十进制二进制十六进制 0 0016 117 218 319 420 521 622 723 824 925 1026 1127 1228 1329 1430 1531 【练】填写下表,熟悉巩固 十进制二进制十六进制十进制二进制十六进制 0 0016 10000 10 1 1117 1000111 2 10218 10010 12 3 11319 10011 13 4 100420 10100 14 5 101521 10101 15 6 110
8、622 10110 16 7 111723 10111 17 8 1000824 11000 18 9 1001925 11001 19 10 1010 A2611010 1A 11 1011 B27 11011 1B 12 1100 C28 11100 1C 13 1101 D29 11101 1D 14 1110 E30 11110 1E 15 1111 F31 11111 1F 【做一做】十进制整数转换为其他进制数 把十进制非负整数转换为二进制数,可使用短除法,即把十进制非负整数转换为二进制数,可使用短除法,即 “除二取余除二取余”法。例如,把十进制整数法。例如,把十进制整数1818转换
9、为二进制转换为二进制 数的过程如图数的过程如图3.1.73.1.7所示,结果为所示,结果为1818( (1010)= = 。 所得的余数倒排,即 从高位到低位排列就 是所得数。 1001010010( (2 2) 【练1】请将8进制数2071转换为十进制 =1=1* *8 80 0+7+7* *8 81 1+0+0* *8 82 2+2+2* *8 83 3 =1081=1081 【练2】请将10进制数1082转换为八进制 (1082)10=(2072)8 【做一做做一做】在在PythonPython中,可使用函数中,可使用函数intint( (num,Rnum,R) )将将R R进制的整数进
10、制的整数numnum转转 换为十进制,这里换为十进制,这里numnum要使用字符型要使用字符型( (常数两端加上引号常数两端加上引号) ) int(11011010,2) #将二进制整数11011010转换为十进制 218 #返回结果为十进制整数 int(2071,8) #将八进制整数2071转换为十进制 1081 #返回结果为十进制整数 int(FF,16) #将十六进制整数FF转换为十进制 255 #返回结果为十进制整数 体验PythonPython中中数值型数据(非负整数)的编码 【学】比特,字节,文件大小的单位 计算机中数据的最小单位是二进制位,称为比特(bit,简写为b)。 计算机存
11、储数据的基本单位是字节(Byte,简写为B),1B=8b 因为计算机内数据都是以二进制形式存储的,所以文件大小的单 位也是字节。但字节单位太小,常用的有KB,MB,GB等。 1KB=210B=1024B 1MB=210KB=220B=1,048,576B 1GB=210MB=220KB=230B=1,073,741,824B 【体验】在Python中,可使用函数bin(num),oct(num), hex(num),将十进制整数num分别转换为二、八、十六进制, 这里num为整数 bin(100) #将十进制整数100转换为二进制 0b1100100 #返回结果为字符串,前缀0b表示二进制 o
12、ct(100) #将十进制整数100转换为八进制 0o144 #返回结果为字符串,前缀0o表示八进制 hex(100) #将十进制整数100转换为十六进制 0 x64 #返回结果为字符串,前缀0 x表示十六进制 二、文本型数据二、文本型数据( (字符字符) )的编码的编码 【做一做】活动2 查看数据的编码 在Python中,通过ord()函数查看字符的编码 ord(1) #显示字符“1”的编码值 49 ord(A) #显示字符“A”的编码值 65 ord(男) #显示字符“男”的编码值 30007 chr(30007) #显示编码值为30007的字符 男 【学一学】ASCII码 【学一学】Un
13、icode码 汉字编码之国家标准:汉字编码之国家标准: (1)GB 23121980字符集共收录字符集共收录6763个汉字个汉字 (2)GBK字符集,兼容字符集,兼容GB 23121980标准,收入标准,收入21003个汉字个汉字 (3)GB 180302000字符集,包含字符集,包含GBK字符集和字符集和CJK统一汉字扩充统一汉字扩充 A的汉字,共计的汉字,共计27533个汉字;个汉字; (4)GB 180302005字符集,在字符集,在GB 180302000的基础上,增加的基础上,增加 了了CJK统一汉字扩充统一汉字扩充B的汉字及其他汉字,的汉字及其他汉字, 共计共计70244个汉字。个
14、汉字。 Unicode Unicode字符集,是全球可以共享的编码字符集,涵盖了世界上字符集,是全球可以共享的编码字符集,涵盖了世界上 主要文字的字符,其中包括简繁体汉字,共计主要文字的字符,其中包括简繁体汉字,共计74686个汉字。如汉字个汉字。如汉字 “男男” 的的Unicode编码为编码为30007(十进制),用十六进制表示为(十进制),用十六进制表示为7537, 用二进制表示为用二进制表示为0111010100110111。 在在Python中,函数中,函数ord()返回的是字符的返回的是字符的Unicode码值,函数码值,函数chr()返返 回回Unicode码对应的字符。码对应的字
15、符。 【做一做】在Python中输出自己的姓名,但表达式中不得 直接出现这些汉字 chr(24352)+chr(39134) 张飞 #返回“张飞” str(ord(枣)+ +str(ord(庄) 26531 24196 【了解】汉字的其他编码及相互关系(拓展) 区位码 在GB2312-80信息交换用汉字编码字符集中,所有的 国标汉字与符号组成一个9494的矩阵。在此方阵中,每一行称为一 个区,每一列称为一个位,因此,这个方阵实际上组成了一个有94个 区(区号分别为1到94)、每个区内有94个位(位号分别为1到94)的汉字 字符集。一个汉字所在的区号和位号简单地组合在一起就构成了该汉 字的区位码
16、。在汉字的区位码中,高两位为区号,低两位为位号。 在区位码中,01-09区为682个特殊字符,1687区为汉字区,包含 6763个汉字 。其中16-55区为一级汉字(3755个最常用的汉字,按拼音 字母的次序排列),56-87区为二级汉字(3008个汉字,按部首次序排 列)。 如“热”字的区位码为4040(第40区第40位)。 国标码 国标码是由区位码稍作转换得到,其转换方法为:先将十进制区 码和位码转换为十六进制的区码和位码,再将这个代码的第一个字节和第二 个字节分别加上20H,就得到国标码。如:热字的国标码为4848H,它是经 过下面的转换得到的:4040D2828H+2020H4848H
17、。 机内码 国标码是汉字信息交换的标准编码,但因其前后字节的最高位为0,与 ASCII码发生冲突。如热字,国标码为4848H,而英文字符H的ASCII也为48H,现假 如内存中有两个字节为48H和48H,这到底是一个汉字,还是两个英文字符H?于是就 出现了二义性,显然,国标码是不可能在计算机内部直接采用的,于是,汉字的机内码 采用变形国标码,其变换方法为:将国标码的每个字节都加上128(即80H),即将两个 字节的最高位由0改1,其余7位不变,如上面我们知道,热字的国标码为4848H,加上 8080H,因此,“热”字的机内码就是C8C8H。 “热”字的Unicode码为70EDH。Unicod
18、e码与机内码(基于我国国标编码),是两套独 立的编码体系,相互之间没有固定的转换机制。 输入码 在使用键盘录入汉字时,要用到输入码。“热”字的全拼输入法 编码为re,五笔字型输入法编码为rvyo。 字形码 显示、打印汉字时要用到字库字形。 【了解】汉字的其他编码及相互关系(拓展) 下面的软件,调用了宋体16点阵字库,来显示汉字: 【做一做】你能写出图中汉字“热”的字形编码吗?用十 六进制表示(直接将二进制转换为十六进制,每4位二进制 数字对应1位十六进制数字)。汉字“热”的字形编码占多 少字节? 参考答案:0840 0840 0848 7FFC 0848 0A48 1CC8 6848 08A8
19、 088A 290A 1204 0000 4888 4446 8442, 占32字节 四、练习 【练习【练习1 1】进制转换】进制转换 1011010010110100(2) (2)=( ) =( )(10) (10) 3D3D(16) (16)=( ) =( )(10) (10) 255255(10) (10)=( ) =( )(16) (16) 100100(10) (10)=( ) =( )(2) (2) E2E2(16) (16)=( ) =( )(2) (2) 1110010111100101(2) (2)=( ) =( )(16) (16) 【练习【练习2 2】我们最熟悉的是十进制,在十进制中,有】我们最熟悉的是十进制,在十进制中,有 2121* *12=25212=252,那么这个结论还在哪些进制中成立?为什么?,那么这个结论还在哪些进制中成立?为什么? 参考参考 答案:答案: 180, 61, FF, 1100 100, 1110 0010, E5