数字化信息编码与C语言的数据类型.ppt

上传人:大张伟 文档编号:8917371 上传时间:2021-01-24 格式:PPT 页数:51 大小:377.50KB
返回 下载 相关 举报
数字化信息编码与C语言的数据类型.ppt_第1页
第1页 / 共51页
数字化信息编码与C语言的数据类型.ppt_第2页
第2页 / 共51页
数字化信息编码与C语言的数据类型.ppt_第3页
第3页 / 共51页
数字化信息编码与C语言的数据类型.ppt_第4页
第4页 / 共51页
数字化信息编码与C语言的数据类型.ppt_第5页
第5页 / 共51页
点击查看更多>>
资源描述

《数字化信息编码与C语言的数据类型.ppt》由会员分享,可在线阅读,更多相关《数字化信息编码与C语言的数据类型.ppt(51页珍藏版)》请在三一文库上搜索。

1、C, 软件学院 计算机科学与工程系,数字化信息编码与 C语言的数据类型,数字化信息编码 计算机中整数的运算 整型 浮点型 字符型,综合以上讨论,得到以下结论:,码长为1个字节的补码形式的定点整数,取值范围从-128到127,并且它们首尾相连构成一个环(-128-1=127,127+1=-128)。 计算时,如果两个负数相加的和为正数,或两个正数相加的和为负数,则计算“正确”,结果“错误”。总之,只要运算结果超出取值范围,则结果必然会因“溢出”而出错。,整数乘除运算时应注意的事项,C语言中用*号代替号。进行乘法运算时,结果更容易因超出取值范围而出错,因此需特别注意。 C语言中用/号代替号。进行除

2、法运算时,虽然不必担心结果溢出,但是C语言在计算时规定,表达式的值与表达式中操作数的类型相同,因此,3/2的商是整数1而不是浮点数1.5。此时,多数系统中商只取整数部分,截掉商的小数部分(也就是“向零取整”,正数变小,负数变大)。例如:3/2=1,2/3=0,3/-2=-1。,模运算操作符“%”,还有一个专用于两个整数相除的操作符“%”,操作符%对两个整数进行模运算,所以又称取模操作符,也就是给出两个整数相除的余数。 计算机中的余数与商有关,余数被除数商除数。如:2%3=2,3%-2=1,-3%2=-1。 思考 :127+1-2=? -128-1+2=?,return,整型的种类,整型的基本类

3、型符为int。 整型的编码长度通常是一个机器字。在早期的16位机器如IBM Pc机上,整型(int)用2个字节编码,取值范围为-215215-1即-3276832767;而在32位机器上,整型(int)用4个字节编码,取值范围为-231231-1, 即-21474836482147483647。,编码长度相对比较固定的整型,short int 类型(短整型),可简写为short,编码长度为2个字节,取值范围-3276832767。 long int 类型(长整型),可简写为 long,编码长度为4个字节,取值范围-21474836482147483647。 严格地说,整型只有两类short i

4、nt 和long int,int与系统相关,但仅相当于其中的一个。VC6.0中,int的编码长度是4个字节,与long int等价。,“无符号”整型,修饰符unsigned加在整型前面就变成了“无符号”整型。 所谓“无符号”整型,就是编码中取消了符号位,全部为数值位,因此“无符号”整型虽然不能编码负数,但是,它可以编码的正数的范围扩大了一倍。 无符号整型有哪些呢?,“无符号”整型,unsigned short int (无符号短整型),简写为unsinged short,编码长度2个字节不变,取值范围0216-1(65535)。 unsigned long int(无符号长整型),简写为uns

5、inged long,编码长度4个字节不变,取值范围0232-1(4294967295)。 unsigned int (无符号整型),等价于上面两个中的一个。,如何选择变量的类型?,数据的运算结果超出取值范围时就会因溢出而出错 长整型的变量存储取值范围很小的数据又会造成内存空间的浪费,整型字面量,所谓字面量是指在编码的时候就已经确定的量。一个整数如23就是一个整型字面量。 整型字面量默认也是有类型的 如果整型字面量的值在-3276832767范围内,则认为其是short型的;如果整型字面量的值超过了上述范围,而在-2147836482147483647范围内,则认为其是long型的。,整数字面

6、量的后缀,字面量加上后缀l或L后被认为是长整型。,如23默认为是short型的,占两个字节,而23L则是long型的,占4个字节。 整型字面量可以加上后缀u或U,表示它的类型为unsinged int(无符号整型)。整型字面量还可以加上u和l两后缀(次序、大小写不限),表示该字面量为无符号长整型。,整数字面量的注意事项,一,整型字面量究竟是何类型通常与编译系统相关,如字面量-1在TC中通常认为是short型,而在VC中通常认为是long型的。 二,如果有初始化语句unsinged short i = -1u;, 则-1会先转换成1111 1111 1111 1111的补码形式,然后-1的补码形

7、式会存储到变量i标示的存储空间,即i的值是65535。这条语句也可写作unsinged short i = -1;。 语句short i = -1u;和语句short i = 65535;均应这样理解。,整数字面量的注意事项,三,在类型转换和表达式求值时,要特别注意字面量的类型,如:-1u - 23的结果 -1u是short型无符号数时其值为65535,因此-1u - 23结果为65512,大于0,而-1 - 23的结果为-24小于0。,整型字面量的进制,在C语言中,使用前缀来标明一个整型字面量的进制。 前缀为“0”的整数是八进制数如027为十进制的23; 前缀为“0 x”或“0X”的整数是十

8、六进制数如0 x17为十进制的23 。 十进制整数的前缀为空,即无前缀。 如:语句int i=027, j=0 x17, k=0X17; 定义了三个变量i、j、k,而且它们的值都被初始化为23了。,整型的输入输出,利用格式符串%d可以输出整型变量的值,也可把数据赋值给整型变量。 利用格式字符d使用语句scanf(%d ,把类似031这样的八进制字面量正确赋值给变量a可以吗? 行不通!格式字符d只能用来输入或输出有符号的十进制整数 与整型相关的常用格式字符还有i、u、o、x、X。 整型的格式字符前面可以加一个附加格式说明符l或h。l用于长整型输入或输出;h用于短整型的输入或输出。一般地,int型

9、用d,short型用hd,long型用ld。,与整型相关的常用格式字符,格式字符i与格式字符d的作用相同。 格式字符u以无符号数编码格式来输入或输出十进制整数。注意:在利用格式符串%u输入数据遇到负数时,仅仅把负数的补码存储到相关内存单元。 如:unsigned short i; scanf(%hu, 处理方式类似。,函数printf的输出,利用格式符串%u输出时,相关数据会以无符号数编码格式输出,如unsigned short i = -1; printf(%hu,%hu, -1, i);语句的输出为65535,65535。 注意: 函数printf在输出数据时,只根据其格式字符串解释相关内

10、存单元的编码格式! 如:unsigned long l=-1; printf(%d, %hu,l,l); 则输出为:,格式字符o,格式字符o以无符号数编码格式八进制整数形式输入或输出数据。格式字符o把用户输入的数据看作八进制整数,因此可以简单地理解为它先把输入数据转换为十进制整数,然后再按无符号数编码格式处理。计算机中只存储整型数据的二进制补码形式。 对于语句scanf(%ho%ho, 语句的输出为177777,27。,格式字符x和X,格式字符x和X以无符号数编码格式十六进制整数形式输入或输出数据,x和X的区别在于输出时整数中的字母(af)是小写(x时)还是大写(X时)。 对于语句scanf(

11、%hx%hx, 语句的输出为ffffffff,1B。,例2-7 整型数据的输入和输出,23 23 23(回车),i: 23:0000 0000 0001 0111 j: 023:0000 0000 0001 0011 k:0 x23:0000 0000 0010 0011,程序分析,scanf(%hd%ho%hx, ,例2-7 整型数据的输入和输出,-23 -23 -23(回车),i: 23:0000 0000 0001 0111? j: 023:0000 0000 0001 0011? k:0 x23:0000 0000 0010 0011?,i: 1111 1111 1110 1001 j

12、: 1111 1111 1110 1101 k: 1111 1111 1101 1101,程序分析,scanf(%hd%ho%hx, ,注意,在用scanf函数输入多个数据时,数据之间默认以空格、制表符(Tab键)或回车分隔,如果格式字符串之间有其它字符,则约定数据之间以该字符为分隔,如格式字符串为%d,%d时,数据的输入形式应为23,23回车。,return,浮点型的取值范围和有效数字,C语言中的浮点型对应于浮点数用于定义存储小数的变量。 C语言中将编码长度为4个字节的浮点数称为float型。下面以2.1.3节中介绍的浮点数为例估算一下float型浮点数的取值范围和有效数字。 float型浮

13、点数的阶码占一个字节,取值范围-128127,因此它的取值范围为2-1282127,约为10-381038。float型浮点数的尾数占三个字节,可以精确到二进制小数点后第23位(最高位是符号位),即2-23,约为10-6.9。因此,它的有效数字为十进制小数点后67位。,C语言中常用的浮点型有两种:float型和double型,C语言中还有long double (长双精度)浮点型。C语言标准规定long double的精度至少与double相同,VC6.0为一个long double型变量分配8个字节,而在有些系统则分配16个字节。,浮点型的字面量,浮点型的字面量有两种格式,小数形式和指数形式

14、。 小数形式如0.25,-3.0等,指数形式用e或E分隔尾数和阶码如-1.23e-2,0.023E3等。 浮点型的字面量通常被认为是双精度数,有其参与的运算时,结果也是一个双精度数,当需要把运算结果存储在一个单精度的浮点型变量中时,只保存也仅能保存其前7位(十进制的7位,实际上是二进制的23位)。这样做可以使计算结果更精确,但运算速度稍低。当程序对精度要求不高时,可以在字面量的后面加字母f或F强制系统把它们按单精度数处理,如1.23e-2F *2.56789123f的积就是单精度的。,浮点型数据输入,浮点型数据输入时,常用的格式字符有 f、e和E,它们对应于单精度的字面量。 前面加一个附加格式

15、说明符l后,它们则对应于双精度的字面量。 float f; double d; scanf(“%f%e”, ?,浮点型数据输出,浮点型数据可以用两种形式输出:小数形式和指数形式。 小数形式输出时的格式字符为f,此时默认输出6位小数。 指数形式输出时的格式字符为e或E,两者不同之外在于用小写e还是大写E分隔尾数和阶码。用指数形式输出时,数据为规范的指数形式即尾数的整数部分仅有一位且不是0。在输出浮点型数据时不区分单双精度。,小数形式和指数形式,m.n形式的修饰符,可以在%和格式字符之间插入m.n形式的修饰符(如3.2f)调整输出,m和n应为正整数,m用于限定输出数据所占的最小宽度,即输出最少占m

16、列。输出数据长度小于m,则在左端补空格,n用于指定输出数据的小数位数。 如1.23e+002的输出占9列,当m的值为11时,输出为 “ 1.23e+002”;m.n前有减号-时数据会左对齐输出,此时的输出为“1.23e+002 ”。 当数据的实际长度大于m的值时按实际长度输出,因为m仅限定了输出的最小宽度。,m.n形式的修饰符,-m.n形式的修饰符可以部分使用, 如%-5f表示 输出的最小宽度为5列,实际长度小于5列时左对齐 %.3f表示 输出的数据保留3位小数。 另外-m形式的修饰符可以用于整型数据,作用相同, 如%-5d表示 输出整数时最小宽度为5列,实际长度小于5列时左对齐。,例2-8

17、浮点型数据的输入和输出,例2-8 浮点型数据的输入和输出,使用浮点型变量时,需特别注意误差和精度。,125125125.125e2(1.25125125125e10)虽然是小数,但可以精确地转换为二进制数1011101001110011011100101000000000.1 变量fa输出为1.251251302400000e+010是由于精度的限制,浮点型变量只能保证67位的有效数字,而双精度浮点型能保证1516位的有效数字,故变量d就可以精确地输出此数为1.251251251250000E+010。,return,字符型数据的编码,字符型数据是非数值型数据,包括各种文字、数字与符号等。 和

18、数据型数据一样,字符型数据也需要以数字化信息编码的形式存储到计算机中。字符型数据编码时,不仅要考虑编码长度,还要考虑字符如何输入(输入码)、如何存储(机内码)、怎样输出字符的形状(输出码)。 简单介绍西文字符的机内码。西文字符通常包括:英文字母、数字、标点符号、运算符号(+,*,/ )等。,标准化是字符编码的原则,规定每个字符对应的二进制串,计算机中需要存储一个字符时就存储其对应的二进制串,反之计算机中的这个二进制串如果要解释为字符就输出为该字符。如果都遵照相同的标准,则相互之间就可以准确地传递文字信息了。 西文字符的机内码采用ASCII码(ASCII编码表见附录)。ASCII码的码长为一个字

19、节,最高为0,因此ASCII码可以编码128(27)个西文字符,其中大部分为可打印或可显示字符,一些是控制字符。,ASCII码,字符型字面量,9是一个整数,还是一个字符呢? 字符型字面量用一对单撇号括起来表示,如9, A, b, *, (空格字符)等。 字符型变量的类型说明符为关键字char。语句char c =9;定义了一个字符型变量c,并初始化为字符9的ASCII码,即变量c所代表的内存单元的存储状态为 有语句short i = 9;时,变量i所代表的内存单元的存储状态为,字符型字面量的其它形式,单撇号本身该如何办呢?用char c =;的形式显然不合适。 此外,ASCII码中的控制字符在

20、键盘上没有对应键时又该如何输入它们呢? 字符型字面量的另一种形式是一对单撇号内直接放字符的ASCII码,此时,字符的ASCII码必须以开头,后跟该字符的八进制形式的ASCII码,或后跟以x或X开头的该字符的十六进制形式的ASCII码。 还有一种形式是直接给出字符的ASCII码。,下面几条语句等价,char c = 57; char c = 071; char c = 0 x39; char c = 9; char c = 71; char c = x39; char c = X39;,表2-2常用的转义序列,字符串,字符串简单地理解为用一对双撇号括起来的一串字符型字面量,如 Hello,c!n

21、等。 注意:printf(“Hello,c!n);与printf(”Hello,c!12);等价。 同样,下面几条语句等价: char c = 10; char c = n; char c = 12; char c = xa;,例2-9字符型数据的输入和输出,与字符型数据相对应的格式字符为c。,回车键,注意C语言中通常把回车键解释为换行符(n),而非回车符(r),当输出换行符(n)时,正如前面章节中经常用到的那样,不会显示什么字符只是把当前的输出位置移到下一行的开始处。由于变量cd的值为n,因此语句printf(ca)%c(cb)%c(cc)%c(cd)%c, ca, cb, cc, cd);

22、与printf(ca)%c(cb)%c(cc)%c(cd)n, ca, cb, cc);等价。,整型方式输出,字符型数据也可用整型方式输出,printf函数把变量所标示的内存单元的内容以整型编码方式解释。变量ca存储内容为9的ASCII码, 以%d格式输出时为57。,putchar函数和getchar函数,putchar函数的功能是向输出设备输出一个字符。使用时,把欲输出的字符数据作为putchar函数的输入即可。 例2-10 putchar函数的使用,getchar函数,getchar函数的功能是获得用户输入的一个字符,并把字符的ASCII码作为函数的返回值。 例2-11 getchar函数的使用,注意:,程序执行到语句c = getchar( );时,getchar函数运行,等待用户输入数据。getchar函数只有遇到回车后才返回,因此即使输入zzj回车,getchar函数也是返回首个字符z,此时程序的输出依然为:z。,例2-12 综合示例,return,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 科普知识


经营许可证编号:宁ICP备18001539号-1