资源简介 第3单元 认识数据 3.1 数据编码(第2课时) 数值与文本的编码 【玩】活动1 卡片组合游戏 【玩中做 做中思】 0.数1,2,4,8,16构成什么数列?公比是多少? 1.用这5张卡片,最大能表示的十进制数是多少(等比数列部分和)? 若用二进制数表示,是多少?如何分别表示十进制数的0,1,2,3,…? 2.如果要表示更大的数,怎么办?例如:255. 3.现有255个相同的苹果,事先分装成若干袋,每袋装若干个苹果,当用户来买苹果时,无论他要多少个([0,255]之内),都可以不拆开袋子,直接选取几个袋子给他。那么事先应该怎样装袋?有多少种装袋方案?如果他要100个苹果,则应给他哪几袋? 一、数值型数据(非负整数)的编码 【悟】二进制与数制转换 把两图关联起来看: 二进制数01001所表示的数的含义就是 1*1+0*2+0*4+1*8+0*16=1*20+0*21+0*22+1*23+0*24=9 其中20,21,22,23,24,…,称为二进制整数从右到左各位的权值,2是二进制数的基数。二进制数有且仅有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个符号,一般用A~F(a~f),分别相当于十进制数的10~15。基本计数规则是逢十六进一,即F+1=10. 十六进制整数从右到左各位的权值依次是160,161,162,163,….例如十六进制整数2F3D(16)=D(13)*160+3*161+F(15)*162+2*163=12093 数制的这种规律,实现了任何一个整数只有一种表示法,而且任何一种表示法只表示一个整数,即整数与表示法之间是一一对应关系。 一、数值型数据(非负整数)的编码 【练】填写下表,熟悉巩固 {5C22544A-7EE6-4342-B048-85BDC9FD1C3A}十进制 二进制 十六进制 十进制 二进制 十六进制 0 ? ? 16 ? ? 1 ? ? 17 ? ? 2 ? ? 18 ? ? 3 ? ? 19 ? ? 4 ? ? 20 ? ? 5 ? ? 21 ? ? 6 ? ? 22 ? ? 7 ? ? 23 ? ? 8 ? ? 24 ? ? 9 ? ? 25 ? ? 10 ? ? 26 ? ? 11 ? ? 27 ? ? 12 ? ? 28 ? ? 13 ? ? 29 ? ? 14 ? ? 30 ? ? 15 ? ? 31 ? ? 一、数值型数据(非负整数)的编码 【练】请将8进制数2071转换为十进制 一、数值型数据(非负整数)的编码 【做】在Python中,可使用函数int(num,R)将R进制的整数num转换为十进制,这里num要使用字符型(常数两端加上引号) >>> int('11011010',2) #将二进制整数11011010转换为十进制 218 #返回结果为十进制整数 >>> int('2071',8) #将八进制整数2071转换为十进制 1081 #返回结果为十进制整数 >>> int('FF',16) #将十六进制整数FF转换为十进制 255 #返回结果为十进制整数 一、数值型数据(非负整数)的编码 【学】比特,字节,文件大小的单位 计算机中数据的最小单位是二进制位,称为比特(bit,简写为b)。 计算机存储数据的基本单位是字节(Byte,简写为B),1B=8b 因为计算机内数据都是以二进制形式存储的,所以文件大小的单位也是字节。但字节单位太小,常用的有KB,MB,GB等。 1KB=210B=1024B 1MB=210KB=220B=1,048,576B 1GB=210MB=220KB=230B=1,073,741,824B 递进倍数是210=1024,因此民间把10月24日戏称为“程序员节”。 一、数值型数据(非负整数)的编码 【做】十进制整数转换为其他进制数 把十进制非负整数转换为二进制数,可使用短除法,即“除二取余”法。例如,把十进制整数18转换为二进制数的过程如图3.1.7所示,结果为18(10)=10010(2)。 微课:十进制非负整数转换为二进制 一、数值型数据(非负整数)的编码 【悟】仿照图3.1.7,将十进制整数175转换为16进制 一、数值型数据(非负整数)的编码 【学】在Python中,可使用函数bin(num),oct(num),hex(num),将十进制整数num分别转换为二、八、十六进制,这里num为整数 >>> bin(100) #将十进制整数100转换为二进制 '0b1100100' #返回结果为字符串,前缀0b表示二进制 >>> oct(100) #将十进制整数100转换为八进制 '0o144' #返回结果为字符串,前缀0o表示八进制 >>> hex(100) #将十进制整数100转换为十六进制 '0x64' #返回结果为字符串,前缀0x表示十六进制 一、数值型数据(非负整数)的编码 二、文本型数据(字符)的编码 【做】活动2 查看数据的编码 在Python中,通过ord()函数查看字符的编码 >>> ord('1') #显示字符“1”的编码值 49 >>> ord('A') #显示字符“A”的编码值 65 >>> ord('男') #显示字符“男”的编码值 30007 >>> chr(30007) #显示编码值为30007的字符 '男' 【学】ASCII码 二、文本型数据(字符)的编码 【学】Unicode码 汉字编码之国家标准: (1)GB 2312—1980字符集共收录6763个汉字 (2)GBK字符集,兼容GB 2312—1980标准,收入21003个汉字 (3)GB 18030—2000字符集,包含GBK字符集和CJK统一汉字扩充A的汉字,共计27533个汉字; (4)GB 18030—2005字符集,在GB 18030—2000的基础上,增加了CJK统一汉字扩充B的汉字及其他汉字, 共计70244个汉字。 Unicode字符集,是全球可以共享的编码字符集,涵盖了世界上主要文字的字符,其中包括简繁体汉字,共计74686个汉字。如汉字“男” 的Unicode编码为30007(十进制),用十六进制表示为7537,用二进制表示为0111010100110111。 在Python中,函数ord()返回的是字符的Unicode码值,函数chr()返回Unicode码对应的字符。 二、文本型数据(字符)的编码 【做】在Python中输出自己的姓名,但表达式中不得直接出现这些汉字 >>> chr(24352)+chr(39134) '张飞' #返回“张飞” 二、文本型数据(字符)的编码 二、文本型数据(字符)的编码 【了解】汉字的其他编码及相互关系(拓展) ①区位码 在GB2312-80《信息交换用汉字编码字符集》中,所有的国标汉字与符号组成一个94×94的矩阵。在此方阵中,每一行称为一个"区",每一列称为一个"位",因此,这个方阵实际上组成了一个有94个区(区号分别为1到94)、每个区内有94个位(位号分别为1到94)的汉字字符集。一个汉字所在的区号和位号简单地组合在一起就构成了该汉字的"区位码"。在汉字的区位码中,高两位为区号,低两位为位号。 在区位码中,01-09区为682个特殊字符,16~87区为汉字区,包含6763个汉字 。其中16-55区为一级汉字(3755个最常用的汉字,按拼音字母的次序排列),56-87区为二级汉字(3008个汉字,按部首次序排列)。 如“热”字的区位码为4040(第40区第40位)。 二、文本型数据(字符)的编码 【了解】汉字的其他编码及相互关系(拓展) ②国标码 国标码是由区位码稍作转换得到,其转换方法为:先将十进制区码和位码转换为十六进制的区码和位码,再将这个代码的第一个字节和第二个字节分别加上20H,就得到国标码。如:"热"字的国标码为4848H,它是经过下面的转换得到的:4040D→2828H→+2020H→4848H。 二、文本型数据(字符)的编码 【了解】汉字的其他编码及相互关系(拓展) ③机内码 国标码是汉字信息交换的标准编码,但因其前后字节的最高位为0,与ASCII码发生冲突。如"热"字,国标码为4848H,而英文字符"H"的ASCII也为48H,现假如内存中有两个字节为48H和48H,这到底是一个汉字,还是两个英文字符"H"?于是就出现了二义性,显然,国标码是不可能在计算机内部直接采用的,于是,汉字的机内码采用变形国标码,其变换方法为:将国标码的每个字节都加上128(即80H),即将两个字节的最高位由0改1,其余7位不变,如上面我们知道,"热"字的国标码为4848H,加上8080H,因此,“热”字的机内码就是C8C8H。 “热”字的Unicode码为70EDH。Unicode码与机内码(基于我国国标编码),是两套独立的编码体系,相互之间没有固定的转换机制。 查询汉字的机内码与Unicode码 二、文本型数据(字符)的编码 二、文本型数据(字符)的编码 【了解】汉字的其他编码及相互关系(拓展) ④输入码 在使用键盘录入汉字时,要用到输入码。“热”字的全拼输入法编码为re,五笔字型输入法编码为rvyo。 ⑤字形码 显示、打印汉字时要用到字库字形。 二、文本型数据(字符)的编码 【了解】汉字的其他编码及相互关系(拓展) 下面的软件,调用了宋体16点阵字库,来显示汉字: 二、文本型数据(字符)的编码 【做】你能写出图中汉字“热”的字形编码吗?用十六进制表示(直接将二进制转换为十六进制,每4位二进制数字对应1位十六进制数字)。汉字“热”的字形编码占多少字节? 二、文本型数据(字符)的编码 【悟】这些“编码”之间既相互联系又有区别,在不同环节下使用,为计算机处理汉字形成了完整的数据链,而这些“编码”就是这条链路上的关键“节点”。 三、小结 二进制的优点与缺点。优点: 1.使计算自动化成为可能。二进制,只有0和1两个状态,具有2个稳定状态的电子器件很多,如开关的接通和断开,晶体管的导通和截止、磁元件的正负剩磁、电位电平的高与低等都可表示0、1两个数码。 2.使自动化计算装置简便可靠。二进制数的运算法则少,运算简单,使计算机运算器的硬件结构大大简化(十进制的乘法九九口诀表55条公式,而二进制乘法只有4条规则)。 3.使自动化逻辑运算简单易行。由于二进制0和1正好和逻辑代数的假(False)和真(True)相对应,有逻辑代数作为理论基础,用二进制能很方便地进行逻辑运算。 基于这3条,计算机系统采用二进制。 缺点: 1.用二进制表示一个数时,位数太多,太繁琐。故有16进制。 2.难于记忆,可读性差。所以,与人类交互时,计算机系统已经尽量隐藏了二进制的内核了,尽可能人性化了(数值则已自动转为十进制了)。 【划重点】本内容学科核心素养之三层架构 学科知识层:数值(整数)的编码,进制(二进制、 十进制、十六进制)的组成规律及相互 转换,文本数据(字符)的编码:ASCII 码和Unicode码,比特与字节,数据类型 (整数、字符串)及相互转化,循环语句 问题解决层:算法(除2取余法),测试(补丁) 学科思维层:抽象、建模、迭代与自动化(通用性) 三、小结 四、练习 【练习1】进制转换 10110100(2)=( )(10) 3D(16)=( )(10) 255(10)=( )(16) 100(10)=( )(2) E2(16)=( )(2) 11100101(2)=( )(16) ? 【练习2】我们最熟悉的是十进制,在十进制中,有21*12=252,那么这个结论还在哪些进制中成立?为什么? 展开更多...... 收起↑ 资源预览