高一上册信息技术 数据编码——数值与文本的编码 逐字稿-6,611字
师:同学们,前面一课我们学习了信息采集的方式,知道信息在计算机中是以零一的方式存储的。这节课,我们一起来学习数值与文本的编码。
首先,我们来进行活动一。这里有五张卡片,上面的数分别是1、2、4、8、16 ,从右到左、从小到大排列。大家看看,这构成了一个什么数列?它的公比是多少呢?
生:是等比数列,公比为2 。
师:非常好。现在我们用这五张卡片做个游戏。把卡片全部背面朝上,数字朝下,然后保留两张卡片数字朝上。游戏规则是:卡片朝上标记为1,背面朝上标记为0 。比如,现在朝上的卡片顺序标记为01001 ,朝上的数字分别是8和1 。我们来看看卡片上数字的和,第一张卡片背面朝上,数字为0 ;第二张朝上,数字为8 ;第三张背面朝上,数字为0 ;第四张背面朝上,数字为0 ;最右边一张朝上,数字为1 ,所以数字和为0 + 8 + 0 + 0 + 1 = 9 。再看标记位,从左到右,第一张背面朝上,标记为0 ;第二张朝上,标记为1 ;第三、四张背面朝上,标记为0 ;最右边一张朝上,标记为1 。这时,标记位01001可以当成一个二进制数,对应的十进制数就是9 。
接下来,用这五张卡片,最大能表示的十进制数是多少呢?
生:把五张卡片全部数字朝上,数字和相加,16 + 8 + 4 + 2 + 1 = 31 。
师:没错,此时每张卡片标记位全部为1 ,即二进制的11111 ,对应的十进制数就是31 。这里面的规律大家看出来了吗?我们进一步研究更大的数,比如255用二进制数表示是多少呢?
这里我用一排9张卡片,从右边往左边,第一张卡片数字是1 ,即2的0次方;第二张卡片数字是2 ,即2的一次方;第三张卡片数字是4 ,即2的二次方;第四张卡片数字是8 ,即2的三次方;第五张卡片数字是16 ,即2的四次方;第六张卡片数字为32 ;第七张卡片数字为64 ;第八张卡片数字为128 ;第九张卡片数字为256 。我们会发现,表示255最多用8张卡片,因为第九张卡片数字256已经超过255 。那么怎么确定用哪几张卡片呢?我们用255减去128,再减去64 ,依次往下减,255 - 128 - 64 - 32 - 16 - 8 - 4 - 2 - 1 ,刚好减到0 ,也就是255 = 128 + 64 + 32 + 16 + 8 + 4 + 2 + 1 ,对应的是2的7次方 + 2的6次方 + 2的5次方 + 2的4次方 + 2的3次方 + 2的2次方 + 2的一次方 + 2的0次方 。所以,8张卡片全部数字朝上,数字和恰好为255 ,对应的二进制数就是8个1 。大家理解了吗?
生:理解了。
师:那我们再看,如何用二进制表示十进制的0 - 9呢?比如用四张卡牌,第一个排列为0001 ,只有最右边一张卡牌为1 ,数字和就是1 ;第二个排列为0010 ,右边倒数第二张卡牌数字朝上,面额为2 ,对应的实际数就是2 ;第三个组合右边两张卡牌数字朝上,数字和为3 ;0100对应的数字和为4 ,即二进制数0100对应的十进制数为4 。以此类推,0101对应的十进制数为5 ,0110对应的十进制数为6 。这样我们就得出了0 - 9自然数和二进制数的对应。
从刚才的游戏,我们来分析这样一个题目:假如有255个苹果,事先分别装成若干袋,每袋若干个苹果,当用户来买苹果时,无论他要多少个(在0 - 255之间),都可以不拆开袋子,直接选取几个袋子给他。那么事先应该怎么装袋?如果他要100个苹果,应该给他几个袋子呢?
生:每个袋子装一个苹果,装255个袋子。
师:这样虽然能满足要求,但大家想一想,是否科学合理呢?
生:太繁琐了。
师:对,我们可以考虑用前面游戏中的思路,用二进制的方式装袋。第一个袋子装2的0次方,即1个苹果;第二个袋子装2的一次方,即2个苹果;第三个袋子装2的二次方,即4个苹果;第四个袋子装2的三次方,即8个苹果;第五个袋子装2的四次方,即16个苹果;第六个袋子装32个苹果;第七个袋子装64个苹果;第八个袋子装128个苹果。从上一个游戏可知,255刚好是这8个袋子苹果数的和。这样是不是比每个袋子装一个苹果方便很多?
生:是方便很多。
师:下面我们讨论第二个问题,如果要100个苹果,应该给他哪几个袋子呢?
生:第八个袋子有128个苹果,不能给。
师:对,100最多可以装64个苹果的袋子,这样还剩下36个苹果。剩下的36个苹果,最多能给装32个苹果的袋子,还剩下4个苹果,恰好有装4个苹果的袋子。所以100 = 64 + 32 + 4 ,也就是只要把装64个苹果、装32个苹果和装4个苹果的这三个袋子给他,就可以实现卖给他100个苹果。100 = 64 + 32 + 4 = 2的6次方 + 2的5次方 + 2的二次方 ,对应的二进制数恰好是1100100 。
接下来我们思考二进制与数值转换。把刚才第一个游戏移过来对比,大家发现什么规律了吗?比如二进制01001这个序列,它表示的数从右向左依次计算:第一位是1乘1 ,然后是0乘2 ,然后是0乘4 ,然后是1乘8 ,然后是0乘以16 。其实代表的是2的0次方、2的一次方、2的二次方、2的三次方、2的四次方 。这些二进制数从右到左各位的数,我们叫它权值,这里的2是二进制的基数。二进制有且仅有两种不同的数字,要么是0 ,要么是1 。它最基本的运算规则是逢二进一,即1 + 1 = 10 。
我们再看十进制数,比如2019 ,它等于9乘以10的0次方 + 1乘以10的一次方 + 0乘以10的二次方 + 2乘以10的三次方 = 2019 。可以发现,它和二进制运算很相像,十进制整数从右向左各位的权值依次是10的0次方、10的一次方、10的二次方、10的三次方 。同理,十六进制数基数为16 ,要有16种不同数字,我们平时用的是0 - 9 ,还需补充6个符号,一般用大写或小写a - f来表示,分别相当于十进制的10 - 15 。十六进制从右到左的权值依次是16的0次方、16的一次方、16的二次方、16的三次方 。例如十六进制2F3D ,等于13(d在十六进制中是13 )乘以16的0次方 + 3乘以16的一次方 + 15(f在十六进制中是15 )乘以16的二次方 + 2乘以16的三次方 = 12093 。这样十六进制的运算就容易理解了。数字的这种规律使得任何一个整数只有一种表示方法,而且任何一种表示法只表示一个整数,即整数与表示法之间是一一对应关系。
大家核对一下答案,看看和你计算的是不是一样。前面几个数,十进制的0 ,二进制是0 ,十六进制也是0 ;十进制的1 ,二进制是1 ,十六进制也是1 ;十进制的2 ,二进制是10 ,十六进制还是2 ;十进制的3 ,二进制是11 ,十六进制是3 。后面的依次类推。
下面给大家一个练习,如果将八进制数2071转成十进制,会吗?八进制数从右向左每一位的权值是8的0次方、8的一次方、8的二次方和8的三次方,基数为8 。所以2071的八进制计算公式为2乘以8的三次方 + 0乘以8的二次方 + 7乘以8的一次方 + 1乘以8的0次方 ,结果是1024 + 0 + 56 + 1 = 1081 。所以八进制2071对应的十进制是1081 。
在Python中,可以用int函数实现把二进制、八进制、十六进制数转成十进制输出。比如int('11011010', 2) ,可以把字符串'11011010'作为二进制输出为十进制数218 ;int('2017', 8) ,可以把字符串'2017'作为八进制数输出它的十进制结果;int('FF', 16) ,可以把字符串'FF'作为十六进制数输出它对应的十进制数255 。
下面我们看看比特、字节和文件大小的单位。在计算机中,数据的最小单位是二进制位,称为比特,简写为小写的b 。存储数据的基本单位是字节,1个字节是8比特。计算机内数据除字节外,常用的还有KB、MB和GB 。1KB等于2的10次方b ,即1024B ;1MB等于2的10次方KB ,等于2的20次方b ,即1048576B ;1GB等于2的10次方MB ,等于2的20次方KB ,等于2的30次方B ,即1073741824B 。递进的倍数是2的10次方,即1024 ,因此民间把10月24日戏称为程序员节。