基本数据类型剖析

上传人:woxinch****an2018 文档编号:54338717 上传时间:2018-09-11 格式:PPT 页数:53 大小:434KB
返回 下载 相关 举报
基本数据类型剖析_第1页
第1页 / 共53页
基本数据类型剖析_第2页
第2页 / 共53页
基本数据类型剖析_第3页
第3页 / 共53页
基本数据类型剖析_第4页
第4页 / 共53页
基本数据类型剖析_第5页
第5页 / 共53页
点击查看更多>>
资源描述

《基本数据类型剖析》由会员分享,可在线阅读,更多相关《基本数据类型剖析(53页珍藏版)》请在金锄头文库上搜索。

1、第2讲:基本数据类型剖析,变量与常量 内储存器的组织 数据类型 基本数据类型 整数类型 字符 浮点类型,数据(Data) 程序需要使用数据。 数据是信息的载体。 数据有多种形式:数、字符、图片等。 常量(Constants) 在程序运行之前可以预先设定,并在整个运行过程中没有变化的数据。 例如引例中的圆周率3.14。 变量(Variables) 在程序运行过程中可能变化或被赋值的数据。 例如引例中的半径和面积。,数据类型,数据类型的作用 决定数据的存储方式和占用的存储空间的大小。 决定可以进行的操作。 C语言的数据类型 基本类型整型(integer),字符型(character),浮点型(fl

2、oating-point),枚举类型(enumeration) 构造类型结构体(structure),共用体(union),数组(array) 指针类型(pointer) 空类型(void),位、字节和字,内存储器的组织,位(bit):最小的存储单位,可以容纳两个值之一,即0或1。,2000,2001,2002,字节(Byte):基本的存储单位,8位。,字(word):自然的存储单位,包含若干个字节。例如32位机的一个字就是32位。,地址:以字节为单位从0开始编号。,整数的存储方式,有符号的正整数 在内存中以二进制补码形式存放。 正整数的补码与原码相同。 例如:10,符号位,数轴,0,215-

3、1=32767,可表示的数的范围,-215=-32768,整数的存储方式,有符号的负整数 在内存中以二进制补码的形式存放。 例如:-10,符号位,整数的存储方式,无符号整数 所有二进制位都存放数值。 例如:65535,0,216-1=65535,可表示的数的范围,整数的类型,C语言提供多种整数类型 为程序员提供了针对不同用途的多种选择。,C标准只规定:short int long 最大最小值参考,仅供参考,实际值与所使用的操作系统、编译系统、机器有关。,整型常量,整型常量有三种形式: 十进制(decimal)整数 12 65 65535 八进制(octal)整数:带前缀 0(zero) 014

4、 0101 0177777 十六进制(hexadecimal)整数:带前缀 0x 或 0X 0xc 0x41 0xffff默认类型是int,即有符号的基本整型。 可以加上后缀 u 或 U 表示无符号整数,或者 l 或 L 表示长整数。 0xb5Lu,整型变量,声明变量(Declaration) 变量在使用之前必须被声明。 声明语句的格式:举例, ,.;,int counter; int width, height; short x, y; long number;,变量声明创建了变量:为变量分配了存储空间。,height,整型变量,初始化(Initialize)变量 为变量赋一个初始值。 可以

5、在声明语句中初始化变量。 举例变量获得值的方法 直接赋值 输入 初始化,int counter = 0; int width = 352, height = 288;,初始化式,288,height,整型变量,输出变量的值 可以使用printf()函数。 与int类型对应的格式说明符是%d。 举例,#include void main() int a, b;a=32767; b=-32768;printf(“a=%d,b=%dn“, a, b); ,a=32767,b=-32768,整数的溢出,溢出 整数太大,超出了整数类型的数值范围。 使用printf() 时与unsigned int类型对

6、应的格式说明符是%u。 举例,#include void main() int a, b;unsigned c, d;a = 2147483647; b = a+1;c = 4294967295; d = c+1;printf(“a=%d,b=%dn“, a, b);printf(“c=%u,d=%u“, c, d); ,a=2147483647,b=-2147483648 c=4294967295,d=0,?,整数的溢出,溢出 结果分析结论 a+1 的结果(2147483648) 超出了基本整型变量 b 所能容纳(表示)的数值范围(-21474836482147483647)。 请分析d的结

7、果。,0 1 1 1 1 1 1 1.1 1 1 1 1 1 1,1 0 0 0 0 0 0 0.0 0 0 0 0 0 0,a(2147483647),1 0 0 0 0 0 0 0.0 0 0 0 0 0 0,a+1(2147483648),b(-2147483648),12,加正数,减正数,字符的存储方式,字符编码 计算机使用一种数字编码(整数)来表示字符,每一个字符都对应一个特定的整数。 常用的编码是ASCII(美国信息交换用标准码)。 7位二进制数,十进制码值范围从0到127。 一般用一个字节保存,最高位为0。 字符的存储方式与整数相同 举例 字母A的ASCII码值为65, 那么在内

8、存中以65的二进制形式存储, 且占一个字节。,01000001,字符的类型和字符变量,C语言的字符类型:char 占一个字节; 可视为一个有符号的整数。 举例,#include void main() char c1, c2; /声明字符变量c1 = 97; /把一个整数赋值给字符变量c2 = c1-32; /字符变量可以进行算术运算printf(“c1=%c,c2=%cn“, c1, c2);printf(“c1=%d,c2=%dn“, c1, c2); ,c1=a,c2=A c1=97,c2=65,字符常量,字符常量 用单引号括起来的一个字符。 x 9 + C语言将字符常量视为int类型。

9、 举例(cw02-04.c)如果int类型为16位,char类型为8位, 那么对于bc,将把b和c的ASCII码值存储在两个字节中,并把c赋值给变量c2。 注意:不同系统处理方式不同,结果不同。,char c1, c2; c1=a; c2=bc;,0 1 1 0 0 0 0 1,c1,0 1 1 0 0 0 1 1,c2,0 1 1 0 0 0 1 1,0 1 1 0 0 0 1 0,bc,L,H,97,99,99,98,字符常量,转义字符(escape character) 指代一些特殊的字符。(打印不出来的字符)举例,a 警报 反斜杠() b 退格 ? 问号(?) f 走纸 单引号() n

10、 换行 “ 双引号(”) r 回车 ooo 八进制值(o表示一个八进制数字) t 水平制表符 xhh 十六进制值(h表示一个十六进制数字) v 垂直制表符,#include void main() printf(“atbncbd100x40n“); ,ab d,浮点数的存储方式,浮点数 浮点型数据在内存中按指数形式存放。 例如:314.15 = 3.1415102,由此可见,尾数部分的宽度决定了有效数字的个数(即精度),阶码部分的宽度决定了数值范围。,科学计数法允许使用少量的数字表示很大范围的数和很小的数。,浮点数的类型,浮点数也有多种类型 类型名称及典型大小,S = 1 参考,仅供参考,实际

11、值与所使用的操作系统、编译系统、机器有关。,数轴,0,可表示的正数,可表示的负数,浮点型常量,浮点型常量有两种形式: 十进制形式 12.3 .65 0. 指数形式: 1.2e-2 .1E5 7E0 1.210-2 0.1105 7.0100默认类型是double。 可以加上后缀 f 或 F 表示float类型,或者 l 或 L 表示long double类型,否则该常量是double类型。 2.3f 1.2L .1E5f,浮点型变量,浮点型变量的声明和初始化 举例,float radius; double x = 0.0, y = 0.0;,不能写成: double x = y =0.0;,浮

12、点型变量,浮点数的输出 使用printf()函数 float和double对应的格式说明符为%f、%e。 举例,#include void main() float f;double d;f=33333.33333f;d=33333.3333333333;printf(“f=%fnd=%f“, f, d); ,f=33333.332031 d=33333.333333,有效数字位数是有限的,在可表示的有效位之外的数字被舍去。因此可能会产生误差。,浮点数的舍入误差,浮点数的舍入误差 举例,#include void main() float a, b;a=123456.789e5;b=a+20;

13、printf(“a=%fnb=%f“, a, b); ,a=12345678848.000000 b=12345678848.000000,?,浮点数的舍入误差,浮点数的舍入误差 结果分析,a=123456.789e5; b=a+20;,a+20的理论值应该是:12345678920 但是,一个实型变量能够保证的有效数字是7位,后面的数字将被舍去,是没有意义的。 因此,最后得到 b=12345678848.000000,应当避免一个很大的数和一个很小的数直接相加或相减,否则就会“丢失”较小的数。,浮点数的溢出,上溢 举例 若某系统中的最大float值为3.4e38,进行如下操作得到结果下溢 举

14、例:假设-10是最小的指数,能够保留四位有效数字 如果把数0.1234e-10除以10,将得到结果0.0123e-10,但损失了一位有效数字。,float toobig = 3.4e38 * 100.0f; printf(“toobig=%f“, toobig);,inf,无穷大(infinity),小结,C语言有多种数据类型。 基本的数据类型包括两大类: 整数类型 浮点类型 开发程序时,应当注意所需变量及其类型的选择。 一般使用int和float表示数,用char表示字符。 在使用变量的函数的可执行语句之前声明该变量,并为它选择有意义的名字。 初始化变量使用的常量应当与变量的类型相匹配。,作

15、用范围和存储类别,简介,变量定义的完整格式:数据类型 占据存储空间的大小 取值范围 存储类别 在内存中持续的时间(生存期) 在硬件中存放的位置 其它属性 作用范围 可以被引用的程序部分(可见性),作用范围,程序中的所有标识符构成了名字空间。 标识符的作用范围 能够引用该标识符的程序部分。 四种作用范围: 文件作用范围 函数作用范围 程序块作用范围 函数原型作用范围,作用范围,文件作用范围 在函数外声明的标识符,可以在所有函数中被引用。 包括:全局变量,函数定义,函数原型。,int total;int max(int, int);void main() int limit;int max(int x, int y) ,作用范围 从声明的位置开始,到文件的末尾。,作用范围,函数作用范围 在函数体内定义的标识符,只能在函数体内被引用。 包括:语句标号,void main() loop:goto loop; ,作用范围,程序块作用范围 在程序块内声明的变量,在程序块内被引用。 包括:程序块内的变量(局部变量),函数的参数。,int max(int x, int y) void main() int a; int a; ,作用范围 从声明的位置开始,到程序块的右大括号,覆盖 同名变量,内部变量“覆盖了”外部变量,作用范围,函数原型作用范围 函数原型中的参数。,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号