《c语言数据类型和表现形式.ppt》由会员分享,可在线阅读,更多相关《c语言数据类型和表现形式.ppt(62页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2知识回顾3知识回顾 数据的存储格式 合法的取值范围 占用内存空间的大小A. 可参与的运算种类 数据类型数据类型基本类型基本类型构造类型构造类型指针类型指针类型空类型空类型整型整型实型(浮点型)实型(浮点型)字符型字符型枚举类型枚举类型数组类型数组类型结构体类型结构体类型共用体类型共用体类型单精度实型单精度实型双精度实型双精度实型基本整型基本整型长整型长整型短整型短整型无符号整型无符号整型长双精度实型长双精度实型6 整型 实型A.字符型7 计算机知识储备: 计算机处理的信息采用二进制的方式表示和存储 英文称谓中文称谓换算方法bit(b)位(比特)Byte(B)字节1 B = 8 bKiloby
2、te(KB)K1 KB = 1,024 BMegabyte(MB)兆1 MB = 1,024 KBGigabyte(GB)G1 GB = 1,024 MBTerabyte(TB)T1 TB = 1,024 GB9 假设整数在内存中用假设整数在内存中用2 2个字节存储个字节存储1 000 0001 1000 00010 000 0001 1000 0001符号位符号位1 1:负数:负数0 0:正数:正数10 正数正数的原码、反码和补码相同1 的补码的补码 0 000 0000 0000 000132767 的补码的补码 0 111 1111 1111 1111(215-1,2个字节的存储单元能表
3、示的最大正数个字节的存储单元能表示的最大正数)11 负数负数的原码、反码和补码不同 原码:符号位是1,其余各位表示数值的绝对值 反码:符号位是1,其余各位对原码取反 补码:反码加1-1 原码原码 1 000 0000 0000 0001 反码反码 1 111 1111 1111 1110 原码取反原码取反 补码补码 1 111 1111 1111 1111 反码反码1 11232767 (215-1) 补码补码 0 111 1111 1111 1111(2(2个字节的存储单元能表示的最大正数个字节的存储单元能表示的最大正数) )-32767 原码原码 1 111 1111 1111 1111
4、反码反码 1 000 0000 0000 0000 原码取反原码取反 补码补码 1 000 0000 0000 0001 反码反码1-32768 = -32767-1=-215 补码补码 1 000 0000 0000 0000(2(2个字节的存储单元能表示的最小负数个字节的存储单元能表示的最小负数) ) -32768 -1 0 1 32767 32767 0111 1111 1111 1111 1 0000 0000 0000 0001 0 0000 0000 0000 0000 -1 1111 1111 1111 1111 -2 1111 1111 1111 1110 -32767 100
5、0 0000 0000 0001 -32768 1000 0000 0000 000014 有符号整型有符号整型 无符号整型无符号整型 数据长度数据长度int unsigned int 32位位short int unsigned short int 16位位Long int unsigned long int 32位位 扩展的整数类型:扩展的整数类型:short 、 long、 unsigned int15C标准中规定标准中规定:1)short 所占内存字节数不大于所占内存字节数不大于int2)int所占内存字节数不大于所占内存字节数不大于long具体实现与具体实现与编译器编译器有关有关有些
6、编译器甚至有些编译器甚至short、int、long所占字节数都相同所占字节数都相同 16有符号有符号 short 1 000 0000 0000 0000 -32768 -2150 111 1111 1111 1111 32767 215-1无符号无符号 unsigned short0000 0000 0000 0000 01111 1111 1111 1111 65535 216-11819实型(浮点型)数据:带有小数部分的数实型(浮点型)数据:带有小数部分的数单精度浮点型单精度浮点型 float双精度浮点型双精度浮点型 double 存储存储 数据精度数据精度 取值范围取值范围 (有效数
7、字有效数字)float 4字节字节 七七/八八位位 (10-38 1038)double 8字节字节 十五十五/十六十六位位 (10-308 10308 )doubledouble型数据的精度更高,取值范围更大型数据的精度更高,取值范围更大20u数据精度数据精度 与 取值范围取值范围是两个不同的概念: float x = 1234567.89;虽在取值范围内,但无法精确表达。 x=1234567.80 最后一位是随机数,损失了有效数字,降低了精度 float y = 1.2e55 y 的精度要求不高,但超出取值范围。21-123.45: -1.2345E+02符号位符号位 -阶码阶码 02尾数
8、尾数 1.234522char 8位 (VC编译器)23242526 字符具有数值特征字符具有数值特征 A 65 0100 0001 Q: A +1对应什么字符?对应什么字符?27 存储特征:字符存储特征:字符A ASCIISCII 码码对字符进行运算对字符进行运算 对字符的对字符的A ASCIISCII 码进行运算码进行运算例如:A 的 ASCII 码 65则:A+1=66,对应字符字符 B281:整数1: 数字字符2930反斜杠后跟一个字符或数字字符常量,代表一个一个字符 n 101 x41 A所有字符都可以用转义字符表示31常量变量32常量变量33# include int main(v
9、oid) double r, s, v; scanf(%lf, &r); s = 4.0*r*r*3.14; v = 4.0/3.0*r*r*r*3.14; . return 0;红色标注的是常量34u整型常量u实型常量u字符型常量u符号常量35常量的类型通常由书写格式决定123 (整型)4.56 (实型)A (字符型)36 整数的表示程序中三种表现形式:十进制整数:正、负号,09,首位不是0 例: 10,123八进制整数:正、负号,07,首位是0 例: 010,012316进制整数:正、负号,09,a-f或A-F,前缀是0 x,0X 例:0 x10,0 x12337转换过程:123 = 01
10、111011 (B) 二进制 =173 (O) 八进制 =7B (X) 十六进制123 0173 0 x7b16 020 0 x1010 012 0XA注意:不能超出整型数据的取值范围,比长整注意:不能超出整型数据的取值范围,比长整型数还要大的数只能用实数来表示型数还要大的数只能用实数来表示38整数后可以加上字母后缀暗示类型p123L 123l longp123U 123u unsignedp123LU 123lu unsigned long39实数的表示浮点表示法:实数由正号、负号、阿拉伯数字09和小数点组成,必须有小数点,小数点前后至少一边有数字 0.123 123.4 12.12. .1
11、2科学计数法:实数由正号、负号、数字和字母e(或E)组成,e是指数的标志,在e之前要有数据(尾数),e之后的指数只能是整数(阶码)。 6.026E-27 1.2e+30(+可省略) 1E-540AttentionAttention:程序中出现的实数,系统默认是程序中出现的实数,系统默认是doubledouble类型类型41字符常量:单个字符a A 9 + & ASCII字符集列出所有可用的字符(常用的128个,扩展表128个)每个字符:惟一的次序值( ASCII 码)0-9 升序排列A-Z 升序排列a-z 升序排列42用一个标识符代表一个常量(#define命令命令) :PI43# inclu
12、de # define PI 3.14int main(void) double r, s, v; printf(“Enter r: ); scanf(%lf, &r); s = 4.0 * PI * r * r ; v = 4.0 / 3.0 * PI * r * r * r ; printf(s=%f, v=%fn, s, v); return 0;# include int main(void) double r, s, v; scanf(%lf, &r); s = 4.0*r*r*3.14; v = 4.0/3.0*r*r*r*3.14; . return 0;4445常量变量46在程
13、序运行过程中,其值可以被改变的量。Name 变量名变量名Type 变量类型变量类型Value 变量的值变量的值Address 变量的存储单元变量的存储单元地址地址u 变量必须先声明,再初始化,接着可以被使用u 声明时指定数据类型数据类型和和变量名变量名49格式:类型名类型名 变量名表;变量名表;变量名:合法的标识符习惯使用小写字母;见名知义int celsius, fahr; float x;double area, length;50u变量名对应内存中的一个存储单元,存放该变量名对应内存中的一个存储单元,存放该 变量的值变量的值u该存储单元的大小由变量的数据类型决定该存储单元的大小由变量的数
14、据类型决定51变量名 源代码中,变量依靠变量名来标识; 目标代码中,变量依靠地址来标识,每个变量的地址互不相同。int a, b;int main() a+; b+; return 0;incl 0 x80495f8incl 0 x80495fc地址52数据类型 任何数据在内存中都是用二进制串的形式表示的; 一串二进制数,只有确定了类型,才有真实的含义; 例:10111111,10000000,00000000,00000000 解释为int型:-1,082,130,432 解释为unsigned型:3,212,836,864 解释为float型:-1.053目标代码体现数据类型的方式 类型的
15、特性蕴含于操作之中; 对不同数据类型,源代码中形式上相同的操作,会被转化为目标代码中的不同操作。53int a;short b;char c; int main() a+; b+; c+; return 0;Incl 0 x80495f8incw 0 x80495fcincb 0 x80495fe不同的操作54p必须先声明,再初始化,接着被使用55变量赋初值:在声明变量的同时对它赋值变量赋初值:在声明变量的同时对它赋值 int a = 5, b = 3;赋值表达式赋值表达式int a, b;a = 5;b = 3; 接受键盘的输入接受键盘的输入int a, b;scanf(%d%d, &a,
16、&b);u如何求大小?如何求大小?u是否固定?是否固定?同种类型在不同的平台其占字节数不尽相同 如int在16位、32位和64位系统上分别占2、4和8个字节现象与危害 在平台间移植时会出现问题,导致数据丢失或者溢出用sizeof获得变量或者数据类型的长度C C语言的关键字语言的关键字两种语法形式两种语法形式 sizeof( sizeof(类型类型) ): 结果为结果为类型类型占用的字节数占用的字节数 sizeof( sizeof(表达式表达式) ): 结果为结果为表达式值所属类型表达式值所属类型占用的字节数占用的字节数 # #includeinclude void mainvoid main(
17、) () printfprintf(Data type Number of bytesn);(Data type Number of bytesn);printfprintf(- -n);(- -n);printfprintf(char %dn, (char %dn, sizeofsizeof(char);(char);printfprintf(int %dn, (int %dn, sizeofsizeof(int);(int);printfprintf(short int %dn, (short int %dn, sizeofsizeof(short);(short);printfprintf(long int %dn, (long int %dn, sizeofsizeof(long);(long);printfprintf(float %dn, (float %dn, sizeofsizeof(float);(float);printfprintf(double %dn, (double %dn, sizeofsizeof(double);(double); 60v介绍C语言的基本数据类型v介绍程序中数据的表现形式v介绍sizeof的作用 Questions and answersQuestions and answers