C++备课讲义第2章_第1页
C++备课讲义第2章_第2页
C++备课讲义第2章_第3页
C++备课讲义第2章_第4页
C++备课讲义第2章_第5页
已阅读5页,还剩140页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1第第2章章 基本数据类型与表达式基本数据类型与表达式2上机时间上机时间:周次周次星期星期节次节次机房机房(第四教学楼第四教学楼)818二二第四大节第四大节3A3B32000H2001H2002H2003H2004H33+5=?5运算器运算器(2000H)+(2002H)用一个字节表示整数,范围为用一个字节表示整数,范围为-128127;用两个字节表;用两个字节表示整数,范围为示整数,范围为-32768 32767。一般用四个字节表示整。一般用四个字节表示整数。数。内存内存CPU内存内存data外存外存Program8硬盘硬盘 优盘优盘 光盘光盘4十进制数的特点十进制数的特点 每一位只能使用十

2、个符号每一位只能使用十个符号 0、1、2、3、4、5、6、7、8、9中的一个。中的一个。每个数位上的数都有固定的每个数位上的数都有固定的“权权”。小数点至左,权值依次为小数点至左,权值依次为100,101,102,.,小数点至右,权值依次为小数点至右,权值依次为10-1,10-2,10-3,。例如:十进制数值例如:十进制数值 2 3 4 . 7 8 每位对应权值每位对应权值 102 101 100 . 10-1 10-25逢十进一。逢十进一。2101210810710410310278.234 十进制数值可以用十进制数值可以用每位的数符每位的数符和和对应的权对应的权值值乘积的乘积的和和来表示。

3、来表示。数符数符权值权值6进位计数制的特点进位计数制的特点 有一个基数有一个基数R,数符使用,数符使用0,1,2,. , (R-1)个个符号。符号。 每位有固定的位权每位有固定的位权W,W=Ri。其中。其中i是位序。是位序。 采用采用“逢逢R进一进一”的进位方式。的进位方式。 可以用一个多项式的和的形式来表示其数值。可以用一个多项式的和的形式来表示其数值。基数:在一个数制系统中所使用的符号个数基数:在一个数制系统中所使用的符号个数称为基数。称为基数。7其中其中Ki为为0,1,2,.,(,(R-1)个符号)个符号中的一个(数符),中的一个(数符),m,n为正整数,为正整数,R为为基数,基数,i为

4、位序。为位序。nmiiim2101nnRkk.kkk.kkS8二进制数二进制数 每一位只能使用两个符号每一位只能使用两个符号 0和和1中的一个。中的一个。 逢二进一。逢二进一。 具有进位计数制的特点。具有进位计数制的特点。 9例如例如:375.13125. 025. 0104821212021202121011.11013210123二进制数值二进制数值 1 1 0 1 . 0 1 1每位对应权值每位对应权值 23 22 21 20 . 2-1 2-2 2-3 10二进制数的特点二进制数的特点 数码符号少,只有两个符号数码符号少,只有两个符号 0和和1 运算规则简单。运算规则简单。 运行可靠。

5、运行可靠。 11v 加法:逢二进一加法:逢二进一 0+0=01+0=10+1=11+1=10v 减法:借一当二减法:借一当二 0-0=01-0=11-1=00-1=112 1 0 1 0 0 1 1 1 1 0 1 0 1 0 1 0 1 0 1 0 0 0 0 0 1 0 0 0 1 1 0v 乘法:乘法: 00=010=001=011=113八进制数和十六进制数八进制数和十六进制数 基数是基数是8,数位用,数位用 07。 逢八进一。逢八进一。用二进制表示大数时,数位较长,容易出错用二进制表示大数时,数位较长,容易出错八进制数八进制数nmiiimm11001n1nnn88k8k.8k8k.8

6、k8kS14nmiiim2101nnRkk.kkk.kkS 基数是基数是16,数位数符为,数位数符为 09,A,B,C,D,E,F。 逢十六进一。逢十六进一。十六进制数十六进制数nmiiimm11001n1nnn1616k16k.16k16k.16k16kS15进位计数制之间的转换进位计数制之间的转换 按权相加。按权相加。如果两数相等,则两数的如果两数相等,则两数的整数整数部分和部分和小小数数部分的值一定部分的值一定分别相等分别相等。二进制数二进制数十进制数十进制数16375.13125.025.0104821212021202121011.1101321012310012345)45(104

7、803221202121202110100117 整数部分的转换整数部分的转换 ,按二进制的权展,按二进制的权展开,除二取余。开,除二取余。十进制数十进制数二进制数二进制数将整数部分和小数部分分别转换。将整数部分和小数部分分别转换。00111n1nnn102k2k.2k2k)725(其系数其系数 排列起来就是二进制数排列起来就是二进制数的各位数码。的各位数码。011nnkk.kk182k)k.2k2k(21362012n1n1nn第一步:将等式两边除以第一步:将等式两边除以2,得到:,得到:等式两边整数与小数应分别相等,所以:等式两边整数与小数应分别相等,所以:K0=12k)k.2k2k(20

8、181123n1n2nn第二步:再对等式两边继续除以第二步:再对等式两边继续除以2,得到:,得到:K1=019依次类推,直到商为依次类推,直到商为0为止。为止。算法为:算法为:725/2=362 余数余数=1=K0362/2=181 余数余数=0=K1181/2=90 余数余数=1=K290/2=45 余数余数=0=K345/2=22 余数余数=1=K422/2=11 余数余数=0=K511/2=5 余数余数=1=K65/2=2 余数余数=1=K72/2=1 余数余数=0=K81/2=0 余数余数=1=K9这时,得到:这时,得到:2012345678910)1011010101()725(kk

9、kkkkkkkk排列时,顺序为排列时,顺序为由下至上。由下至上。20转换成二进制小数为:转换成二进制小数为: 小数部分的转换小数部分的转换 ,按二进制的权,按二进制的权展开,乘二取整。展开,乘二取整。mm) 1m() 1m(2211102k2k.2k2k)32. 0(2m)1m(21)kk.kk.0(21第一步:第一步:将等式两边乘以将等式两边乘以2,得到:,得到:)1m(m1201102k.2k2k)64.0(等式两边整数与小数应分别相等,所以:等式两边整数与小数应分别相等,所以:K-1=0第二步:第二步:再对等式两边继续乘以再对等式两边继续乘以2,得到:,得到:)2m(m1302102k.

10、2k2k)28.1(K-2=1如此继续下去,可以得到如此继续下去,可以得到K-3 K-4 K-m 各位各位的值。的值。220.322=0.64 整数整数=0=K-10.642=1.28 整数整数=1=K-20.282=0.56 整数整数=0=K-30.562=1.12 整数整数=1=K-4算法为:算法为:所以,(所以,(0.32)10=(0.0101.)2 ,直至满足一定,直至满足一定的精度为止。的精度为止。23对于既有整数又有小数的数,则将其整数部对于既有整数又有小数的数,则将其整数部分与小数部分分别转换,再用小数点连接起分与小数部分分别转换,再用小数点连接起来。来。总结:总结:对于基数为对

11、于基数为R的数制与十进制数的转换也遵的数制与十进制数的转换也遵循一样的法则。循一样的法则。整数部分除整数部分除R取余,小数部分乘取余,小数部分乘R取整。取整。不同进制的数制之间的转换,可用十进制数不同进制的数制之间的转换,可用十进制数作为中介,相互转换。作为中介,相互转换。24二进制数二进制数八进制数八进制数二进制数的基为二进制数的基为2,八进,八进制数的基为制数的基为8,23=8,因,因此,此,每位八进制数可以用每位八进制数可以用3 3位二进制数来表示。位二进制数来表示。二进制二进制 八进制八进制0 0 0 00 0 1 10 1 0 20 1 1 31 0 0 41 0 1 51 1 0

12、61 1 1 7 25对既有整数又有小数的二进制数,以小数点对既有整数又有小数的二进制数,以小数点为界,为界,整数部分从右至左,以整数部分从右至左,以3 3位一组,不足位一组,不足三位时,在左边添三位时,在左边添0 0补足三位补足三位;小数部分从左小数部分从左至右,以至右,以3 3位一组,不足三位时,在右边添位一组,不足三位时,在右边添0 0补足三位补足三位,然后把每组的,然后把每组的3位数用相应的八进位数用相应的八进制表示,即得八进制数。制表示,即得八进制数。例如:将例如:将 (11101.11011)2转换成八进制数。转换成八进制数。6110611051013011结果为结果为35.66左

13、边添零左边添零补足三位补足三位右边添零右边添零补足三位补足三位26八进制数八进制数二进制数二进制数将每位八进制数用将每位八进制数用3位二进制数表示即可,去位二进制数表示即可,去掉转换后二进制数整数前和小数点后的掉转换后二进制数整数前和小数点后的0。例如:将例如:将 (15.22)8 转换成二进制数。转换成二进制数。0102010210150011结果为结果为1101.0100127二进制数二进制数十六进制数十六进制数二进制数的基为二进制数的基为2,十六进,十六进制数的基为制数的基为16,24=16,因,因此,此,每位十六进制数可以用每位十六进制数可以用4位二进制数来表示位二进制数来表示。二进制

14、二进制 十六进制十六进制0 0 0 0 00 0 0 1 10 0 1 0 20 0 1 1 30 1 0 0 40 1 0 1 50 1 1 0 60 1 1 1 7 1 0 0 0 81 0 0 1 91 0 1 0 A1 0 1 1 B1 1 0 0 C1 1 0 1 D1 1 1 0 E1 1 1 1 F记住六个数符记住六个数符28对既有整数又有小数的二进制数,以小数点对既有整数又有小数的二进制数,以小数点为界,为界,整数部分从右至左,以整数部分从右至左,以4 4位一组,不足位一组,不足四位时,在左边添四位时,在左边添0 0补足四位补足四位;小数部分从左小数部分从左至右,以至右,以4

15、4位一组,不足四位时,在右边添位一组,不足四位时,在右边添0 0补足四位补足四位,然后把每组的然后把每组的4位数用相应的十六位数用相应的十六进制表示,即得十六进制数。进制表示,即得十六进制数。例如:将例如:将 (11101.11011)2转换成十六进制数。转换成十六进制数。 811000110111010001DD结果为结果为1D.D8补零补零补零补零29十六进制数十六进制数二进制数二进制数将每位十六进制数用将每位十六进制数用4位二进制数表示即可,位二进制数表示即可,去掉转换后二进制数整数前和小数点后的去掉转换后二进制数整数前和小数点后的0。例如:将例如:将 (7B.A8)16 转换成二进制数

16、。转换成二进制数。100081010A1011B01117结果为结果为1111011.10101将零将零去掉去掉30使用不同进制的原因使用不同进制的原因 计算机中只使用二进制一种计数制的原因:计算机中只使用二进制一种计数制的原因: 二进制中只有二进制中只有0和和1两个符号两个符号,使用有两个稳定状态,使用有两个稳定状态的电子器件就可以分别表示它们,而制造有两个稳的电子器件就可以分别表示它们,而制造有两个稳定状态的电子器件要比制造有多个稳定状态的电子定状态的电子器件要比制造有多个稳定状态的电子器件容易得多器件容易得多 二进制数的运算规则简单二进制数的运算规则简单,易于进行高速运算,易于进行高速运

17、算 数理逻辑中的数理逻辑中的“真真”和和“假假”可以分别用可以分别用“1”和和“0”来表示,这样就把来表示,这样就把非数值信息的逻辑运算与数值信非数值信息的逻辑运算与数值信息息的算术运算联系了起来的算术运算联系了起来31 使用八进制和十六进制的原因:使用八进制和十六进制的原因: 二进制数太长,书写、阅读、记忆均二进制数太长,书写、阅读、记忆均不便不便 八进制和十六进制与二进制之间的转八进制和十六进制与二进制之间的转换直观、方便换直观、方便32数值信息的表示数值信息的表示33计算机中的数值信息分类计算机中的数值信息分类整数和实数整数和实数: :它们都是用二进制表示的,它们都是用二进制表示的,但表

18、示方法有很大差别。但表示方法有很大差别。34数制型数据的表示形式数制型数据的表示形式基本概念基本概念 数的长度:在计算机中,相同数据类型数的长度:在计算机中,相同数据类型的数存储单元的长度是统一的。如整型数占的数存储单元的长度是统一的。如整型数占2个字节,实型数占个字节,实型数占4个字节等。个字节等。 数的符号:在计算机中,总是用一个数的数的符号:在计算机中,总是用一个数的最高位表示数的符号(左边第一位),同时最高位表示数的符号(左边第一位),同时约定最高位为约定最高位为0代表正数,为代表正数,为1代表负数。代表负数。35 小数点的表示:在计算机中,小数点的位小数点的表示:在计算机中,小数点的

19、位置是隐含的,以节省存储空间。置是隐含的,以节省存储空间。如果隐含的小数点的位置是固定的,称为定如果隐含的小数点的位置是固定的,称为定点数。点数。如果隐含的小数点的位置是可变的,则称为如果隐含的小数点的位置是可变的,则称为浮点数。浮点数。36整型数的表示整型数的表示整数在计算机中可以用整数在计算机中可以用8位、位、16位、位、32位位64位位来表示。来表示。0 0 0 0,1 0 0 0 表示表示 81 0 0 0,1 0 0 0 表示表示 -8用八位二进制用八位二进制表示整数表示整数37二进制数位二进制数位无符号整数的表示范围无符号整数的表示范围带符号整数的表示范围带符号整数的表示范围80

20、255(28-1)-128 127160 65535(216-1)-32768 32767320 232-1-231 231-1640 264-1-263 263-1 带符号整数的最高位作为符号位,带符号整数的最高位作为符号位,0代表正数,代表正数,1代表负数。代表负数。 正整数(无符号数)正整数(无符号数) 整数(有符号数)整数(有符号数)38机器数的表示方法机器数的表示方法机器中的数值和正负号全部数字化,在机器中的数值和正负号全部数字化,在进行数字运算时,符号位和数值位一起进行数字运算时,符号位和数值位一起参加运算。数字在计算机中有参加运算。数字在计算机中有原码、反原码、反码、补码码、补码

21、三种表示方法。三种表示方法。39 原码原码用最高位表示数的符号,用用最高位表示数的符号,用 0 表示正数,表示正数,1 表示负数,其余位就是该二进制数的绝对值表示负数,其余位就是该二进制数的绝对值例如一个数用例如一个数用8位二进制数表示,则位二进制数表示,则8 的原码为的原码为 0000,1000-8的原码为的原码为 1000,100010 的原码为的原码为 0000,1010-10的原码为的原码为 1000,101040v 在原码表示中,在原码表示中,0 有两种表示方法:有两种表示方法: +0 0000,0000 -0 1000,0000特点特点v 数的表示范围数的表示范围(以以8位二进制为

22、例位二进制为例): 1111,1111 0111,1111 -127127 - 2n-1 +1 2n-1-1 (n=8)41 反码反码 正数正数的反码表示与原码相同,最高位的反码表示与原码相同,最高位为符号位,用为符号位,用 0 表示正,其余位是数值表示正,其余位是数值位。位。 负数负数的反码最高位是的反码最高位是1,其余位是其原,其余位是其原码的按位取反。码的按位取反。42例如一个数用例如一个数用8位二进制数表示,则位二进制数表示,则8 的原码为的原码为 0000,1000 8 的反码为的反码为 0000,1000 -8的原码为的原码为 1000,1000-8的反码为的反码为 1111,01

23、11正数正数的反码表示与原码相同的反码表示与原码相同43 10 的原码为的原码为 0000,1010 10 的反码为的反码为 0000,1010 -10的原码为的原码为 1000,1010-10的反码为的反码为 1111,010144v 在反码表示中,在反码表示中,0 有两种表示方法:有两种表示方法: +0 0000,0000 -0 1111,1111特点特点v 数的表示范围:数的表示范围: 1000,0000 0111,1111 -127127 - 2n-1 +1 2n-1-145 补码补码一个单位的最大量值称为模。一个单位的最大量值称为模。时钟:模为时钟:模为12模与一个数的差称为这个数的

24、模与一个数的差称为这个数的“补数补数”对时钟而言,对时钟而言,8点的补数是点的补数是4点。点。两个数的差为一个数与另一个两个数的差为一个数与另一个数的补数的和。数的补数的和。46ABA(B)补数补数4点减点减8个小时等于个小时等于4点加点加4个小时。个小时。十进制:十进制:124 1264与与6是一对补数。是一对补数。利用补数可以将减法变为加法利用补数可以将减法变为加法47 正数的补码表示与原码相同,最高位为符正数的补码表示与原码相同,最高位为符号位,用号位,用 0 表示正,其余位是数值位。表示正,其余位是数值位。v 正数的补码是它本身。正数的补码是它本身。v 负数的补码就是用模减去该数的绝对

25、值负数的补码就是用模减去该数的绝对值。 负数的补码是它的反码加负数的补码是它的反码加1 1。 ( (负负) )补补= (= (负负) )反反+1+1 二进制的情况下二进制的情况下48例如一个数用例如一个数用8位二进制数表示,则位二进制数表示,则8 的原码为的原码为 0000,1000 8 的反码为的反码为 0000,1000 8 的补码为的补码为 0000,1000-8的原码为的原码为 1000,1000-8的反码为的反码为 1111,0111-8的补码为的补码为 1111,100049 10 的原码为的原码为 0000,1010 10 的反码为的反码为 0000,1010 10 的补码为的补

26、码为 0000,1010-10的原码为的原码为 1000,1010-10的反码为的反码为 1111,0101-10 的补码为的补码为 1111,0110负数用补码表示时,可以把减法变成加法,负数用补码表示时,可以把减法变成加法,而加法在计算机中容易实现。而加法在计算机中容易实现。50v 在补码表示中,在补码表示中,0 有唯一的一种表示方法有唯一的一种表示方法特点特点+0 的原码为的原码为 0000,0000 -0 的原码为的原码为 1000,0000+0 的反码为的反码为 0000,0000 -0 的反码为的反码为 1111,1111+0 的补码为的补码为 0000,0000 -0 的补码为的

27、补码为 0000,000051v 8位二进制数所能表示的补码范围:位二进制数所能表示的补码范围: 1000,0000 0111,1111 -128 127 即:即: - 2n-1 2n-1-10 1 1 1 1 1 1 1 1270 1 1 1 1 1 1 0 126. . . . . .0 0 0 0 0 0 0 1 10 0 0 0 0 0 0 0 01 1 1 1 1 1 1 1 -11 1 1 1 1 1 1 0 -2. . . . . . 1 0 0 0 0 0 0 1 -1271 0 0 0 0 0 0 0 -12852 (负数)(负数)补补 (负数)(负数)原原取反加取反加1 1

28、 (负数)(负数)原原 (负数)(负数)补补取反加取反加1 153v 一个用补码表示的二进制数,最高位为符一个用补码表示的二进制数,最高位为符号位,当符号位为号位,当符号位为0 0时,其余位即为此数的二时,其余位即为此数的二进制值;但若符号位为进制值;但若符号位为1 1时,其余位不是此数时,其余位不是此数的二进制值,的二进制值,将其余位按位取反,且在最低将其余位按位取反,且在最低位加位加1 1,才是它的二进制值。,才是它的二进制值。例如例如: (X)补补=11111111 则:则: (X)原原=10000001 X=-1例如例如: (X)补补=11111001 则:则: (X)原原=10000

29、111 X=-754补码的运算补码的运算 (X+Y)补补=(X)补补+(Y)补补 (X-Y)补补=(X)补补+(-Y)补补已知已知 :X=18,Y=59 求求 X-Y(X-Y)补补=(X)补补+(-Y)补补 =(18)补补+(-59)补补=0001,0010+1100,0101 =1101,0111 (X-Y)原原=(1101,0111)反反1=1010,1000+1=10101001=-4155可见,补码的减法可以化作可见,补码的减法可以化作“加一个负加一个负的减数的减数”来完成,也就是将减法转换为来完成,也就是将减法转换为加法,这对计算机很有意义,可以减少加法,这对计算机很有意义,可以减少

30、逻辑电路的种类,提高可靠性。同时逻辑电路的种类,提高可靠性。同时0 0的的补码在计算机中是唯一的,因此,补码在计算机中是唯一的,因此,计算计算机中的数通常都是用补码来表示、运算机中的数通常都是用补码来表示、运算的。的。56总结:总结: 负数的反码是其正数的按位取反负数的反码是其正数的按位取反 负数的补码是其反码加负数的补码是其反码加1。 负数的原码是其补码取反加负数的原码是其补码取反加1。 正数的反码、补码是它本身。正数的反码、补码是它本身。57实数(浮点数)的表示实数(浮点数)的表示实数:既有整数部分又有小数部分的数,整数和纯小数实数:既有整数部分又有小数部分的数,整数和纯小数只是实数的特例

31、。任何一个实数总可以表达成一个乘幂和只是实数的特例。任何一个实数总可以表达成一个乘幂和一个纯小数之积,例如:一个纯小数之积,例如:56.725=1056.725=102 2(0.56725) (0.56725) 0.0034756=100.0034756=102 2( (0.34756) 0.34756) 指数部分指出实数中小数点的位置,括号里是一个纯小数。指数部分指出实数中小数点的位置,括号里是一个纯小数。二进制数的情况完全类同二进制数的情况完全类同,例如:,例如:1001.011=21001.011=2100100(0.1001011)(0.1001011)0.0010101=20.001

32、0101=21010( (0.10101)0.10101) 58浮点表示法:计算机内部用浮点表示法:计算机内部用“指数指数”( (一个整数,一个整数,称为称为“阶码阶码”) )和和“尾数尾数”( (一个纯小数一个纯小数) )表示实数表示实数的方法的方法 实数实数 = = 尾数尾数 * * 2 2阶码阶码 实数实数N N可表示为:可表示为:N = N = S S 2 2P P (0 S 1)0 S 1)阶码符号位尾数符号位阶码值的编码尾数值的编码15 14 10 9 8 059如果为实数,则用浮点数的形式在内存存储,表示如下:如果为实数,则用浮点数的形式在内存存储,表示如下:JtJSfS阶符阶符

33、阶码阶码数符数符尾数尾数实数是既有整数又有小数的数。实数是既有整数又有小数的数。实数可以表示成:实数可以表示成:N=SRJS 称为尾数,尾数决定有效数字,即数字的精度。称为尾数,尾数决定有效数字,即数字的精度。J 表示指数(阶码)。表示指数(阶码)。R 是基数,可取是基数,可取2,4,8,16等,对具体机器而言,基数等,对具体机器而言,基数取好后,就不能再变了。取好后,就不能再变了。数有正有负数有正有负, 所以设置数符所以设置数符; 阶码亦有正负阶码亦有正负, 所以设置阶符所以设置阶符60字符在计算机中的表示字符在计算机中的表示 61字符、字符集及其码表字符、字符集及其码表 文字的基本元素是字

34、母和符号,统称为文字的基本元素是字母和符号,统称为“字符字符” (character),它包括:字母、数字、符号等它包括:字母、数字、符号等 字符集:一组特定字符的集合字符集:一组特定字符的集合 不同的字符集包含的字符数目与内容不同,如:不同的字符集包含的字符数目与内容不同,如:中文字符集、西文字符集、日文字符集等中文字符集、西文字符集、日文字符集等 字符的编码:字符的编码: 字符集中每个字符都使用二进位字符集中每个字符都使用二进位(code) 表示,称为该字符表示,称为该字符的编码的编码 不同的字符其编码各不相同不同的字符其编码各不相同 字符集中所有字符的编码的一览表,称为该字符集的码表字符

35、集中所有字符的编码的一览表,称为该字符集的码表62西文字符的编码西文字符的编码ASCII码码n 西文是表音文字西文是表音文字(拼音文字拼音文字),它由拉丁字母、数字、标点符号,它由拉丁字母、数字、标点符号以及一些特殊符号所组成以及一些特殊符号所组成n 美国标准信息交换码美国标准信息交换码(ASCII码码):n ASCII字符集包含字符集包含96个可打印字符和个可打印字符和32个控制字符个控制字符n 采用采用7个二进位进行编码个二进位进行编码n 计算机中使用计算机中使用1个字节存储个字节存储1个个ASCII 字符字符n 存在问题:存在问题:n 字符集太小(只有字符集太小(只有128个字符)个字符

36、)n 不同国家和地区使用不同的字符集及其编码,互不兼容不同国家和地区使用不同的字符集及其编码,互不兼容n 东亚地区使用的大字符集无法编码东亚地区使用的大字符集无法编码0X X X X X X X63标准ASCII字符集及其码表 b6 b5 b4 b3 b2 b1 b0 012345670 1 2 3 4 5 6 7 8 9 A B C D E Fb6b5b4b3b2b1b00 1 1 01 0 01 1 0 1 0 1 164汉字如何编码?汉字如何编码? 汉字是记录汉语(国语,华语)的文字,属于汉字是记录汉语(国语,华语)的文字,属于表意文字,它用符号直接表达词或词素表意文字,它用符号直接表达

37、词或词素 汉字的特点汉字的特点 数量大;多个国家和地区使用;字形复杂,数量大;多个国家和地区使用;字形复杂,同音字多,异体字多同音字多,异体字多 如何编码?如何编码? 确定收入多少字、哪些字?确定收入多少字、哪些字? 汉字在字符集中的排序方式汉字在字符集中的排序方式 确定使用的代码结构和代码空间确定使用的代码结构和代码空间65常用的汉字编码字符集常用的汉字编码字符集 国家标准国家标准GB2312 汉字扩充规范汉字扩充规范 GBK 国家标准国家标准GB18030 台湾地区的标准汉字字符集台湾地区的标准汉字字符集CNS 11643 (BIG 5,俗称,俗称“大五码大五码”) 日本工业标准汉字字符集

38、日本工业标准汉字字符集JIS X 0208-90 韩国国家标准汉字字符集韩国国家标准汉字字符集KSC 5601-8766一级汉字一级汉字(3755个)个)二级汉字二级汉字(3008个)个)(扩充使用)(扩充使用)字母、数字和各种符号字母、数字和各种符号 19423位号位号 191655568794区区 号号(按汉语拼音排列按汉语拼音排列)(按偏旁部首排列按偏旁部首排列)GB2312汉字编码字符集汉字编码字符集 1980年颁布年颁布信息交换用汉字编码字符信息交换用汉字编码字符集集基本集基本集GB2312-1980 GB2312字符集由三个部分构成:字符集由三个部分构成:拉丁字母、俄拉丁字母、俄文

39、、日文平假文、日文平假名与片假名、名与片假名、希腊字母、汉希腊字母、汉语拼音等共语拼音等共682个个共共6763个汉字和个汉字和682个符号,个符号,每个每个汉字或符号都有一汉字或符号都有一个确定位置,该位个确定位置,该位置的区号和位号就置的区号和位号就是这个汉字的是这个汉字的“区区位码位码”67GB2312汉字的编码汉字的编码n 每一个每一个GB2312汉字使用汉字使用16位位(2个字节个字节)表示表示n 为了与为了与ASCII字符相区别,每个字节的最高位均字符相区别,每个字节的最高位均为为“1”n 例如:例如:“南南”字的代码是字的代码是11000100 11001111(用十六进制表示为

40、(用十六进制表示为C4CF) 11第第1字节字节第第2字节字节X X X X X X XX X X X X X X68GBK汉字汉字内码扩充规范内码扩充规范 n GB2312的不足:的不足:n 汉字字数太少,缺少繁体字汉字字数太少,缺少繁体字,无法满足无法满足人名、地名、古籍整理、人名、地名、古籍整理、古典文献研究古典文献研究等应用的需要;与等应用的需要;与ASCII码不兼容码不兼容n GBK汉字汉字内码扩充规范(内码扩充规范(1995):):n 在在GB2312基础上,增加了基础上,增加了1万多汉字万多汉字(包括繁体字包括繁体字)和符号和符号n 共有共有21003个汉字和个汉字和883个图形

41、符号,如个图形符号,如“計計算算機機”、冃冃、冄冄、円円、冇冇等繁体字和生僻字等繁体字和生僻字 n 与与GB8312保持向下兼容,也使用双字节表示,第保持向下兼容,也使用双字节表示,第1字节最高位字节最高位必须为必须为“1”:1 X第第1字节字节第第2字节字节X X X X X X XX X X X X X X69应用:应用:操作系统操作系统Windows 95Windows 95以上简体中文版,以上简体中文版,采用采用GBKGBK代码,并提供了多种输入法和字代码,并提供了多种输入法和字体体应用软件应用软件Office 95Office 95以上简体中文版本以上简体中文版本提供提供GBKGBK

42、码的检索和排序码的检索和排序互联网应用互联网应用许多网站的网页使用许多网站的网页使用GBKGBK代码,但目前还不是所有搜索引擎都代码,但目前还不是所有搜索引擎都支持支持 GBK GBK 汉字文本的搜索汉字文本的搜索70UCS/Unicode多文种大字符集多文种大字符集n 背景:为了实现全球数以千计的不同语言文字的统一编码背景:为了实现全球数以千计的不同语言文字的统一编码n 方案:方案:ISO将全球所有文字字母和符号集中在一个字符集中进行统一将全球所有文字字母和符号集中在一个字符集中进行统一编码编码(目前共收集了目前共收集了17x2161,114,112 个个) ,称为,称为UCS/Unicod

43、en UCS/Unicode的编码方案:的编码方案:n 先实现部分字符的编码(共先实现部分字符的编码(共107,361个字符)个字符)n 尽量与已有编码标准兼容尽量与已有编码标准兼容n 其中包含有中、日、韩统一整理出来的近其中包含有中、日、韩统一整理出来的近3万汉字(称万汉字(称CJK汉字)汉字)n 允许有若干不同的编码方案允许有若干不同的编码方案, 例如:例如:单字节:单字节:ASCII字符字符双字节:拉丁、希腊、阿拉伯,双字节:拉丁、希腊、阿拉伯,三字节:三字节:CJK汉字汉字四字节:其他四字节:其他Unicode:UTF-8 单字节可变长编码单字节可变长编码应用:应用:Linux,Web

44、网页,电子邮件网页,电子邮件双字节:双字节: ASCII字符、拉丁、希腊、字符、拉丁、希腊、 阿阿 拉伯,常用拉伯,常用CJK汉字,汉字,四字节:非常用四字节:非常用CJK汉字汉字Unicode:UTF-16双字节可变长编码双字节可变长编码应用:应用:Windows,Mac,Java,71GB18030汉字编码标准汉字编码标准n 背景:无论是背景:无论是Unicode的的UTF-8还是还是UTF-16,其,其CJK汉字字符集虽然汉字字符集虽然覆盖了我国已使用多年的覆盖了我国已使用多年的GB2312和和GBK标准中的汉字,但它们的标准中的汉字,但它们的编编码并不相同码并不相同n 为了既能与为了既

45、能与UCS/Unicode编码标准接轨,又能保护我国已有的大量编码标准接轨,又能保护我国已有的大量汉字信息资源,我国在汉字信息资源,我国在2000年和年和2005年两次发布年两次发布GB18030汉字编码汉字编码国家标准国家标准。n GB18030实质上是实质上是UCS/Unicode字符集的另一种编码方案:字符集的另一种编码方案:n 单字节编码(单字节编码(128个)表示个)表示ASCII字符字符n 双字节编码(双字节编码(23940个)表示汉字,与个)表示汉字,与GBK(以及(以及GB2312)保持向)保持向下兼容,下兼容,GBK不再使用不再使用n 四字节编码(约四字节编码(约158万个)

46、用于表示万个)用于表示 UCS/Unicode中的其他字符中的其他字符n GB18030目前已在我国信息处理产品中强制贯彻执行。目前已在我国信息处理产品中强制贯彻执行。 72标准名称标准名称GB2312GBKGB18030UCS-2(Unicode)字符集字符集6763个汉字个汉字(简简体字体字)21003个汉字个汉字(包括(包括GB2312汉字在内)汉字在内)近近3万汉字万汉字(包括包括GBK汉字汉字和和CJK及其扩及其扩充中的汉字充中的汉字)包含包含10万多字符,其万多字符,其中的汉字与中的汉字与GB18030相同相同编码方法编码方法双字节存储和双字节存储和表示,每个字表示,每个字节的最高

47、位均节的最高位均为为“1” 双字节存储和表双字节存储和表示,第示,第1个字节个字节的最高位必为的最高位必为“1”部分双字节、部分双字节、部分部分4字节表示,字节表示,双字节表示方双字节表示方案与案与GBK相同相同 UTF-8采用单字节采用单字节可变长编码可变长编码 UTF-16采用双字采用双字节可变长编码节可变长编码兼容性兼容性编码编码不兼容!不兼容!小结:几种汉字编码的对比小结:几种汉字编码的对比编码保持向下兼容编码保持向下兼容73例: IE浏览网页时文字编码的选择741514 13 12 11 109876543210有符号数有符号数无符号数无符号数0 1 1 1 1 1 1 1 1 1

48、1 1 1 1 1 132767327670 1 1 1 1 1 1 1 1 1 1 1 1 1 1 032766327660 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1110 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0001 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1-1(补码补码)655351 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0-2655341 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1-32767327691 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0-327683276875常量与变

49、量常量与变量常量:在程序运行过程中,其值一直保持不变的常量:在程序运行过程中,其值一直保持不变的量为常量。量为常量。常量也区分不同的类型:常量也区分不同的类型:30,40 为整型,为整型,30.0,40.0为实型,为实型,编辑器只是根据其表面形式来判断其编辑器只是根据其表面形式来判断其类型。类型。变量:在程序运行过程中,其值可以改变的量为变量:在程序运行过程中,其值可以改变的量为变量。变量。变量在程序的执行中能够赋值,发生变化变量在程序的执行中能够赋值,发生变化。变量。变量有一个名字,有一个名字,并在使用之前要说明其类型并在使用之前要说明其类型,一经,一经说明,说明,就在内存中占据与其类型相应

50、的存储单元。就在内存中占据与其类型相应的存储单元。76#include#define PRICE 30 /常量,在程序中保持不变常量,在程序中保持不变void main(void) int num, total; /定义变量定义变量,在内存中开辟区间在内存中开辟区间 num=10; /变量赋值变量赋值,10为常量为常量 total=num*PRICE; cout“total=“total; /输出结果输出结果其中:其中:num=10 total=num*PRICE 是赋值号,不同于数学意义上的等号。是赋值号,不同于数学意义上的等号。numtotal10300PRICE30 total=3007

51、7C+中有多种数据类型,均有常量与变量之分,各中有多种数据类型,均有常量与变量之分,各占不同的内存空间,正确定义与使用数据是编写占不同的内存空间,正确定义与使用数据是编写程序的基本前提。程序的基本前提。78变量名的命名方法:变量名的命名方法:变量名、数组名、函数名变量名、数组名、函数名称为称为标识符标识符。标识符只能由标识符只能由字母、数字、下划线字母、数字、下划线这三种字符组成,且第这三种字符组成,且第一个字符必须为字母或下划线,长度不大于一个字符必须为字母或下划线,长度不大于247个字符,个字符,大小写不通用大小写不通用。(关键字不能作为标识符)。(关键字不能作为标识符)。关键字即是关键字

52、即是VC+的语法要求中使用的字的语法要求中使用的字。如如 int if while 等。等。 正确的标识符:正确的标识符:INT, sum , de12, SUM等。等。变量必须使变量必须使用前定义,以分配空间。用前定义,以分配空间。举例说明举例说明79abc English 2xy x-y if Else b(3) def Chine_bb b3y AbsFloat float一般变量都是用匈牙利命名法命名的。一般变量都是用匈牙利命名法命名的。int nCount; char chChoice;80整型数据整型数据整型常量:整型常量:常量是根据其表面形式来判定,整型量即是没有小数点的常量是根

53、据其表面形式来判定,整型量即是没有小数点的整数,范围:整数,范围:-231(231-1) ,有三种形式,有三种形式:1)十进制(默认方式)十进制(默认方式)43 1345 876542)八进制)八进制 以以0开头开头 043, 056, 0113)十六进制)十六进制 以以0 x开头开头 0 x12 0 xa3 0 x34 0 xdf(举例说明)(举例说明)81#includevoid main(void)int int10,int8,int16; /定义定义3个整型变量个整型变量int10=10;/默认为十进制默认为十进制int8=010;/八进制八进制int16=0 x10;/十六进制十六进

54、制coutint10=int10endl;coutint8=int8endl;coutint16=int16endl;输出输出int10=10int8=8int16=16int1010int88int161600001010000010000001000082整型变量:整型变量:分为有符号型与无符号型。分为有符号型与无符号型。有符号型:有符号型: short 在内存中占两个字节,范围为在内存中占两个字节,范围为-215(215-1) int 在内存中占四个字节,范围为在内存中占四个字节,范围为-231(231-1)long在内存中占四个字节,范围为在内存中占四个字节,范围为-231231-1无

55、符号型:无符号型:最高位不表示符号位最高位不表示符号位unsigned short 在内存中占两个字节,范围为在内存中占两个字节,范围为0216-1unsigned int 在内存中占四个字节,范围为在内存中占四个字节,范围为0232-1unsigned long在内存中占四个字节,范围为在内存中占四个字节,范围为0232-1831)整型常量整型常量亦有长短之分,常量中无亦有长短之分,常量中无unsigned型,但一型,但一个非负的整型常量可以赋给个非负的整型常量可以赋给unsigned型的变量。型的变量。 2)若一个常量定义为长整型数,则在其后加)若一个常量定义为长整型数,则在其后加l或或L

56、进行区进行区分。分。如:如:32l 32L 564L等,内存为其分配四个字节存储。等,内存为其分配四个字节存储。 一个数在内存中为一个数在内存中为1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1当这个数为有符号数时,是当这个数为有符号数时,是-1;为无符号数时,是;为无符号数时,是232-1内存中的数是以内存中的数是以补码补码的形式存放的。(举例说明)的形式存放的。(举例说明)1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 184#include void main() unsigned short a; short int b= -1; a=b; couta=aen

57、dl;结果:结果:65535 不同类型的整型数据间不同类型的整型数据间的赋值归根到底就是一的赋值归根到底就是一条:条:按存储单元中的存按存储单元中的存储形式直接传送。储形式直接传送。 a1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1b1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1unsigned short a;85实型数据实型数据实型数又称浮点数,有两种表示方式:实型数又称浮点数,有两种表示方式:1)十进制形式:)十进制形式: 23.0 24.5 3.56789 2) 指数形式:指数形式: 23E1 145e-1 356789e1 e前有数字,后前有数字,后面

58、必须是整数。面必须是整数。实型变量分单精度实型变量分单精度 float 和双精度和双精度 double 两种形式:两种形式:float:占四个字节,提供占四个字节,提供78位有效数字。位有效数字。double: 占八个字节,提供占八个字节,提供1516位有效数字。位有效数字。举例说明举例说明86#includevoid main(void)float a, b;double c, d;a=0.01;b=3.45678e-2;c=3.45678e-2;d=9.7654e-5;couta=atb=bendl;coutc=ctd=dendl;a=0.01 b=0.0345678c=0.0345678

59、 d=9.7654e-005Press any key to continue87如果为实数,则用浮点数的形式在内存存储,表示如下:如果为实数,则用浮点数的形式在内存存储,表示如下:JtJSfS阶符阶符阶码阶码数符数符尾数尾数实数是既有整数又有小数的数。实数是既有整数又有小数的数。实数可以表示成:实数可以表示成:N=SRJS 称为尾数,尾数决定有效数字,即数字的精度。称为尾数,尾数决定有效数字,即数字的精度。J 表示指数(阶码)。表示指数(阶码)。R 是基数,可取是基数,可取2,4,8,16等,对具体机器而言,基数等,对具体机器而言,基数取好后,就不能再变了。取好后,就不能再变了。数有正有负数

60、有正有负, 所以设置数符所以设置数符; 阶码亦有正负阶码亦有正负, 所以设置阶符所以设置阶符88一般用一般用4个字节表示一个浮点数,也有用个字节表示一个浮点数,也有用8个字个字节表示的。节表示的。字长一定,尾数越多,精度越高;阶码越多,字长一定,尾数越多,精度越高;阶码越多,范围越大。范围越大。当计算机中出现小于机器所能表示的最小数当计算机中出现小于机器所能表示的最小数时,机器只能当零来处理时,机器只能当零来处理,当出现超过机器所能当出现超过机器所能表示的最大数时,出现溢出现象表示的最大数时,出现溢出现象,一旦出现溢出,一旦出现溢出,就会停止运算。就会停止运算。定点数,浮点数均会出现溢出现定点

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论