C语言-基本数据类型、运算符与表达式.ppt

上传人:枫** 文档编号:571141815 上传时间:2024-08-08 格式:PPT 页数:52 大小:1.40MB
返回 下载 相关 举报
C语言-基本数据类型、运算符与表达式.ppt_第1页
第1页 / 共52页
C语言-基本数据类型、运算符与表达式.ppt_第2页
第2页 / 共52页
C语言-基本数据类型、运算符与表达式.ppt_第3页
第3页 / 共52页
C语言-基本数据类型、运算符与表达式.ppt_第4页
第4页 / 共52页
C语言-基本数据类型、运算符与表达式.ppt_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《C语言-基本数据类型、运算符与表达式.ppt》由会员分享,可在线阅读,更多相关《C语言-基本数据类型、运算符与表达式.ppt(52页珍藏版)》请在金锄头文库上搜索。

1、第第第第2 2 2 2章章章章 基本数据类型、基本数据类型、基本数据类型、基本数据类型、 运算符与表达式运算符与表达式运算符与表达式运算符与表达式 程序是解决某种问题的一组指令的有序集合。程序是解决某种问题的一组指令的有序集合。程序是解决某种问题的一组指令的有序集合。程序是解决某种问题的一组指令的有序集合。 著名计算机科学家沃思(著名计算机科学家沃思(著名计算机科学家沃思(著名计算机科学家沃思(NikiklausNikiklausNikiklausNikiklaus Wirth Wirth Wirth Wirth)提)提)提)提出一个公式:出一个公式:出一个公式:出一个公式: 程序程序程序程序

2、 = = = = 数据结构数据结构数据结构数据结构 + + + + 算法算法算法算法 程序是什么?程序是什么?对数据的描述。对数据的描述。对数据的描述。对数据的描述。在在在在C C C C语言中,体语言中,体语言中,体语言中,体现为现为现为现为数据类型数据类型数据类型数据类型的的的的描述!描述!描述!描述!对数据处理的描述。对数据处理的描述。对数据处理的描述。对数据处理的描述。是为解决一个问题而是为解决一个问题而是为解决一个问题而是为解决一个问题而采取的方法和步骤,采取的方法和步骤,采取的方法和步骤,采取的方法和步骤,是程序的灵魂!是程序的灵魂!是程序的灵魂!是程序的灵魂! 结论:学好结论:学

3、好C C语言首先语言首先就必须十分了解就必须十分了解C C语言语言的数据类型、与算符的数据类型、与算符与表达式。与表达式。掌握变量和常量的概念;掌握变量和常量的概念;掌握变量和常量的概念;掌握变量和常量的概念;理解各种类型的数据在内存中的存放形式;理解各种类型的数据在内存中的存放形式;理解各种类型的数据在内存中的存放形式;理解各种类型的数据在内存中的存放形式;掌握各种类型数据的常量的使用方法;掌握各种类型数据的常量的使用方法;掌握各种类型数据的常量的使用方法;掌握各种类型数据的常量的使用方法;掌握各种整型、字符型、浮点型变量的定义和引掌握各种整型、字符型、浮点型变量的定义和引掌握各种整型、字符

4、型、浮点型变量的定义和引掌握各种整型、字符型、浮点型变量的定义和引用方法;用方法;用方法;用方法;了解调用了解调用了解调用了解调用printfprintfprintfprintf函数输出各种类型数据的方法;函数输出各种类型数据的方法;函数输出各种类型数据的方法;函数输出各种类型数据的方法;掌握数据类型转换的规则以及强制数据类型转换掌握数据类型转换的规则以及强制数据类型转换掌握数据类型转换的规则以及强制数据类型转换掌握数据类型转换的规则以及强制数据类型转换的方法;的方法;的方法;的方法;掌握赋值运算符、算术运算符、位运算符、逗号掌握赋值运算符、算术运算符、位运算符、逗号掌握赋值运算符、算术运算符

5、、位运算符、逗号掌握赋值运算符、算术运算符、位运算符、逗号运算符以及运算符以及运算符以及运算符以及sizeofsizeofsizeofsizeof的使用方法;的使用方法;的使用方法;的使用方法;理解运算符的优先级和结合性的概念,记住所学理解运算符的优先级和结合性的概念,记住所学理解运算符的优先级和结合性的概念,记住所学理解运算符的优先级和结合性的概念,记住所学的各种运算符的优先级关系和结合性。的各种运算符的优先级关系和结合性。的各种运算符的优先级关系和结合性。的各种运算符的优先级关系和结合性。u学习目标学习目标 2.1 C C语言数据类型语言数据类型C C C C数数数数据据据据类类类类型型型

6、型基本类型基本类型基本类型基本类型构造类型构造类型构造类型构造类型指针类型指针类型指针类型指针类型空类型空类型空类型空类型voidvoid定义类型定义类型定义类型定义类型typedeftypedef字符类型字符类型字符类型字符类型charchar枚举类型枚举类型枚举类型枚举类型enumenum整整整整 型型型型实型实型实型实型单精度型单精度型单精度型单精度型floatfloat双精度型双精度型双精度型双精度型doubledouble数组数组数组数组结构体结构体结构体结构体structstruct共用体共用体共用体共用体unionunion短整型短整型短整型短整型shortshort长整型长整型

7、长整型长整型longlong整型整型整型整型intint数据类型决定:数据类型决定:1. 1. 数据占内存字节数数据占内存字节数2. 2. 数据取值范围数据取值范围3. 3. 其上可进行的操作其上可进行的操作本章所介绍本章所介绍本章所介绍本章所介绍的数据类型的数据类型的数据类型的数据类型2.2 常量、变量和标识符常量、变量和标识符1. 1. 标识符标识符 定义:定义:定义:定义:用来标识变量、常量、函数等的字符序列用来标识变量、常量、函数等的字符序列用来标识变量、常量、函数等的字符序列用来标识变量、常量、函数等的字符序列 组成组成组成组成:只能由只能由只能由只能由字母字母字母字母、数字数字数字

8、数字、下划线下划线下划线下划线组成,且第一个字母必须是字母或组成,且第一个字母必须是字母或组成,且第一个字母必须是字母或组成,且第一个字母必须是字母或下划线下划线下划线下划线C C C C语言的关键字不能用作变量名语言的关键字不能用作变量名语言的关键字不能用作变量名语言的关键字不能用作变量名 大小写敏感大小写敏感大小写敏感大小写敏感 长度长度长度长度:有效长:有效长:有效长:有效长度为度为度为度为3 3 3 32 2 2 2个字符个字符个字符个字符。随系统而异,但至少前。随系统而异,但至少前。随系统而异,但至少前。随系统而异,但至少前8 8 8 8个字符有效个字符有效个字符有效个字符有效 命名

9、原则:命名原则:命名原则:命名原则:变量名和函数名中的英文字母一般用小写,以增加可读性变量名和函数名中的英文字母一般用小写,以增加可读性变量名和函数名中的英文字母一般用小写,以增加可读性变量名和函数名中的英文字母一般用小写,以增加可读性 见名知意见名知意见名知意见名知意不宜混淆不宜混淆不宜混淆不宜混淆 如如如如l l l l与与与与I, oI, oI, oI, o与与与与0 0 0 0 在在在在TC2.0TC2.0TC2.0TC2.0及及及及BC3.1BC3.1BC3.1BC3.1中,变量名(标中,变量名(标中,变量名(标中,变量名(标识符)的有效长度为个字符,识符)的有效长度为个字符,识符)

10、的有效长度为个字符,识符)的有效长度为个字符,缺省值为,但在缺省值为,但在缺省值为,但在缺省值为,但在VCVCVCVC中其长度可达中其长度可达中其长度可达中其长度可达到到到到255 255 255 255 例:判断下列标识符号合法性sum Sum M.D.John day Date 3days student_name #33 lotus_1_2_3 char ab _above $123M.D.John3days#33char$123ab . .字符非法字符非法字符非法字符非法 数字数字数字数字3 3 3 3不可作首字符不可作首字符不可作首字符不可作首字符 # #字符非法字符非法字符非法字符

11、非法 charcharcharchar是关键字是关键字是关键字是关键字 字符非法字符非法字符非法字符非法 $ $ $ $不可作首字符不可作首字符不可作首字符不可作首字符2.2 常量、变量和标识符常量、变量和标识符2. 2. 常量常量 定义:定义:定义:定义:程序运行时其值不能改变的量(即常数)程序运行时其值不能改变的量(即常数)程序运行时其值不能改变的量(即常数)程序运行时其值不能改变的量(即常数) 常量的分类常量的分类常量的分类常量的分类 :直接常量直接常量直接常量直接常量( ( ( ( 值常量值常量值常量值常量) ) ) ) 整型常量整型常量整型常量整型常量: : : : 10101010

12、、15151515、-10-10-10-10、-30-30-30-30 实型常量:实型常量:实型常量:实型常量: 12.512.512.512.5、 30.030.030.030.0、-1.5-1.5-1.5-1.5 字符常量字符常量字符常量字符常量: : : : AAAA、bbbb、cccc 字符串常量字符串常量字符串常量字符串常量: : : : “sum”“sum”“sum”“sum”、“A”A”A”A”、“123”123”123”123”符号常量符号常量符号常量符号常量 用标识符来代表常量。用标识符来代表常量。用标识符来代表常量。用标识符来代表常量。 其定义格式为:其定义格式为:其定义格

13、式为:其定义格式为: # #define define define define 符号常量符号常量符号常量符号常量 常量常量常量常量 #define NUM 20 #define PI 3.1415926 #include #include #define PRICE 30#define PRICE 30void main ( )void main ( ) intint num, total; num, total; num = 10; num = 10; total = num * total = num * PRICEPRICE; ; printfprintf (total = %d,

14、total); (total = %d, total); 运行结果:运行结果:total = 300 行尾不能有分号行尾不能有分号行尾不能有分号行尾不能有分号 definedefinedefinedefine前面一定要有前面一定要有前面一定要有前面一定要有# # # # 符号常量名最好使用大写符号常量名最好使用大写符号常量名最好使用大写符号常量名最好使用大写 符号常量名最好有意义符号常量名最好有意义符号常量名最好有意义符号常量名最好有意义 2.2 常量、变量和标识符常量、变量和标识符3. 3. 变量变量 定义:定义:定义:定义:程序运行时其值可以被改变的量程序运行时其值可以被改变的量程序运行时

15、其值可以被改变的量程序运行时其值可以被改变的量 变量的两要素变量的两要素变量的两要素变量的两要素 :变量名变量名变量名变量名 、变量值、变量值、变量值、变量值 变量的定义格式变量的定义格式变量的定义格式变量的定义格式 : 变量的初始化:变量的初始化:变量的初始化:变量的初始化:定义时赋初始值定义时赋初始值定义时赋初始值定义时赋初始值 变量的使用:变量的使用:变量的使用:变量的使用:先定义,后赋值先定义,后赋值先定义,后赋值先定义,后赋值 变量定义位置:变量定义位置:变量定义位置:变量定义位置:一般一般一般一般放在函数开头放在函数开头放在函数开头放在函数开头 存储类型存储类型存储类型存储类型 数

16、据类型数据类型数据类型数据类型 变量名变量名变量名变量名1111,变量名,变量名,变量名,变量名2 2 2 2,变量名,变量名,变量名,变量名nnnn;int x, y, z;float radius, length, area; char ch;决定分配字节数和数的表示范围合法标识符例: int a = 2, b, c = 4; float data = 3.67; char ch = A; int x = 1, y = 1, z = 1; int x = y = z = 1;编译程序根据变量定义为其分配指定字节的内存单元地址short int a=1, b=-3, c;abc2字节2字节2

17、字节地址地址内存.1-3随机数例1: int student; stadent = 19; /Undefined symbol statent in function main 例2: float a,b,c; c = a % b; /Illegal use of floating point in function main void main ( ) int a, b = 2; float data; a = 1; data = (a + b) * 1.2; printf (“data=%fn”, data);变量定义可执行语句void main ( ) int a, b = 2; a =

18、 1; float data; data = (a + b) * 1.2; printf(“data=%fn”,data);2.3 简单数据类型与表示范围简单数据类型与表示范围1. 整型数据整型数据 整型常量整型常量整型常量整型常量 l l 十进制整数:十进制整数:十进制整数:十进制整数:由数字由数字由数字由数字0 0 0 09 9 9 9和正负号表示和正负号表示和正负号表示和正负号表示 . . 如如如如:123,-456,0:123,-456,0:123,-456,0:123,-456,0l l八进制整数:由数字八进制整数:由数字八进制整数:由数字八进制整数:由数字0 0 0 0开头,后跟数

19、字开头,后跟数字开头,后跟数字开头,后跟数字0 0 0 07 7 7 7表示表示表示表示. . . .如如如如:0123,011:0123,011:0123,011:0123,011l l十六进制整数:由十六进制整数:由十六进制整数:由十六进制整数:由0x0x0x0x或或或或0X0X0X0X开头开头开头开头, , , ,后跟后跟后跟后跟0 0 0 09,a9,a9,a9,af,Af,Af,Af,AF F F F表示表示表示表示. . . .如如如如0x123,0Xff 0x123,0Xff 0x123,0Xff 0x123,0Xff 定义整数的符号常量定义整数的符号常量 #define NUM

20、1 20 /#define NUM1 20 /十进制数十进制数2020 #define NUM2 020 / #define NUM2 020 /八进制数(十进制八进制数(十进制1616) #define NUM3 0x2a /#define NUM3 0x2a /十六进制数(十进制十六进制数(十进制4242)思考题:下列整型常量哪些是非法的?思考题:下列整型常量哪些是非法的? 012012,oX7AoX7A,0000,078078,0x5Ac0x5Ac,-0xFFFF-0xFFFF,00340034,7B7B。首字符不能首字符不能是字母是字母o o 八进制数中不八进制数中不能有数字能有数字8

21、 8 十进制数中不十进制数中不能有字母能有字母B B 2. 整数在内存中的表示整数在内存中的表示 整数的数值在内存中用补码的形式存放。整数的数值在内存中用补码的形式存放。整数的数值在内存中用补码的形式存放。整数的数值在内存中用补码的形式存放。 求一个整数补码的方法:求一个整数补码的方法:求一个整数补码的方法:求一个整数补码的方法:(假设用(假设用(假设用(假设用n n n n个二进制位的内存单个二进制位的内存单个二进制位的内存单个二进制位的内存单元来存储它)元来存储它)元来存储它)元来存储它) 如果是正整数如果是正整数如果是正整数如果是正整数,采用符号,采用符号,采用符号,采用符号- - -

22、-绝对值表示,即最高有效位绝对值表示,即最高有效位绝对值表示,即最高有效位绝对值表示,即最高有效位(符号位)为(符号位)为(符号位)为(符号位)为0 0 0 0表示正,数的其余部分则表示数的绝对值;表示正,数的其余部分则表示数的绝对值;表示正,数的其余部分则表示数的绝对值;表示正,数的其余部分则表示数的绝对值; 如果是负整数如果是负整数如果是负整数如果是负整数,则先写出与该负数相对应的正数的补码,则先写出与该负数相对应的正数的补码,则先写出与该负数相对应的正数的补码,则先写出与该负数相对应的正数的补码表示,然后将其按位求反,最后在末位(最低位)加表示,然后将其按位求反,最后在末位(最低位)加表

23、示,然后将其按位求反,最后在末位(最低位)加表示,然后将其按位求反,最后在末位(最低位)加1 1 1 1; 然后将上述求得的补码的低然后将上述求得的补码的低然后将上述求得的补码的低然后将上述求得的补码的低n n n n位存放于内存单元之中,就位存放于内存单元之中,就位存放于内存单元之中,就位存放于内存单元之中,就得到了该整数在内存中的表示,内存单元的最高位是符号得到了该整数在内存中的表示,内存单元的最高位是符号得到了该整数在内存中的表示,内存单元的最高位是符号得到了该整数在内存中的表示,内存单元的最高位是符号位(位(位(位(0 0 0 0表示正,表示正,表示正,表示正,1 1 1 1表示负)。

24、表示负)。表示负)。表示负)。 在在在在TC2.0TC2.0TC2.0TC2.0或或或或BC3.1BC3.1BC3.1BC3.1下,一个整数默认情况下需要下,一个整数默认情况下需要下,一个整数默认情况下需要下,一个整数默认情况下需要2 2 2 2个字节(个字节(个字节(个字节(16161616位)的内存单元存放;而在位)的内存单元存放;而在位)的内存单元存放;而在位)的内存单元存放;而在VC6.0VC6.0VC6.0VC6.0下下下下, , , ,则则则则需要需要需要需要4 4 4 4个字节(个字节(个字节(个字节(32323232位)。位)。位)。位)。 2. 整数在内存中的表示整数在内存中

25、的表示十进制整数十进制整数十进制整数十进制整数 14:14:对于对于对于对于16161616位的内存单元位的内存单元位的内存单元位的内存单元:符号位符号位符号位符号位( ( ( (表示正表示正表示正表示正) ) ) )00001110000011100 000000000000000低字节低字节高字节高字节低地址低地址高地址高地址符号位符号位十进制数十进制数+14+14两个字节的内存实际存放形式两个字节的内存实际存放形式 (+14)(+14)补补补补 = = 0 0000 000 00000000 00000000 1110 1110 2. 整数在内存中的表示整数在内存中的表示十进制整数十进制

26、整数十进制整数十进制整数 14:14:对于对于对于对于32323232位的内存单元位的内存单元位的内存单元位的内存单元:符号位符号位符号位符号位( ( ( (表示正表示正表示正表示正) ) ) )低字节低字节高字节高字节低地址低地址高地址高地址十进制数十进制数+14+14四个字节的内存实际存放形式四个字节的内存实际存放形式 (+14)(+14)补补补补 = = 0 0000 000 00000000 00000000 00000000 00000000 00000000 0000 1110 0000 1110 000011100000111000000000000000000000000000

27、0000000 000000000000000符号位符号位记住:记住:记住:记住:数据在内存中的存放位置是高字节放在高地址数据在内存中的存放位置是高字节放在高地址的存储单元中,低字节放在低地址的存储单元中的存储单元中,低字节放在低地址的存储单元中。对于负数对于负数对于负数对于负数 14:14:对于对于对于对于16161616位的内存单元位的内存单元位的内存单元位的内存单元:符号位符号位符号位符号位( ( ( (表示负表示负表示负表示负) ) ) )11110010111100101 111111111111111低字节低字节高字节高字节低地址低地址高地址高地址符号位符号位十进制数十进制数-14

28、-14两个字节的内存实际存放形式两个字节的内存实际存放形式 (+14)(+14)补补补补 = = 0 0000 000 00000000 00000000 1110 1110 (-14)(-14)补补补补 = = 1 1111 1111 111 1111 11111111 0010 0010 按位求反,末位加按位求反,末位加按位求反,末位加按位求反,末位加1 1 1 1 2. 整数在内存中的表示整数在内存中的表示十进制整数十进制整数十进制整数十进制整数 14:14:对于对于对于对于32323232位的内存单元位的内存单元位的内存单元位的内存单元:符号位符号位符号位符号位( ( ( (表示负表示

29、负表示负表示负) ) ) )低字节低字节高字节高字节低地址低地址高地址高地址十进制数十进制数-14-14四个字节的内存实际存放形式四个字节的内存实际存放形式 (+14)(+14)补补补补 = = 0 0000 000 00000000 00000000 00000000 00000000 00000000 0000 1110 0000 1110 1111001011110010111111111111111111111111111111111 111111111111111符号位符号位(-14)(-14)补补补补 = = 1 1111 111 11111111 11111111 1111111

30、1 11111111 11111111 11111111 0010 0010 按位求反,末位加按位求反,末位加按位求反,末位加按位求反,末位加1 1 1 1 2. 整数在内存中的表示整数在内存中的表示对于较大的整数对于较大的整数对于较大的整数对于较大的整数 65537:65537:(64K64K6553665536)对于对于对于对于16161616位的内存单元位的内存单元位的内存单元位的内存单元:符号位符号位符号位符号位( ( ( (表示负表示负表示负表示负) ) ) )(+65537)(+65537)补补补补 = = 0 01 0000 1 0000 00000000 00000000 00

31、01 0001 (-65537)(-65537)补补补补 = = 1 10 1111 0 1111 11111111 11111111 11111111 按位求反,末位加按位求反,末位加按位求反,末位加按位求反,末位加1 1 1 1 11111111111111111 111111111111111低地址低地址高地址高地址十进制数十进制数-65537-65537两个字节的内存实际存放形式两个字节的内存实际存放形式 低字节低字节高字节高字节符号位符号位取取取取低低低低16161616位位位位真值为:真值为:真值为:真值为:-1,-1,-1,-1,不是不是不是不是-65537!-65537!-65

32、537!-65537!2. 整数在内存中的表示整数在内存中的表示十进制整数十进制整数十进制整数十进制整数 65537:65537:对于对于对于对于32323232位的内存单元位的内存单元位的内存单元位的内存单元:符号位符号位符号位符号位( ( ( (表示负表示负表示负表示负) ) ) )低字节低字节高字节高字节低地址低地址高地址高地址十进制数十进制数-65537-65537四个字节的内存实际存放形式四个字节的内存实际存放形式 (+65537)(+65537)补补补补 = = 0 0000 000 00000000 00000000 0001 0000 0001 0000 00000000 00

33、000000 0001 0001 1111111111111111111111111111111111111110111111101 111111111111111符号位,符号位,表示负表示负(-65537)(-65537)补补补补 = = 1 1111 111 11111111 11111111 1110 1111 1110 1111 11111111 11111111 11111111 按位求反,末位加按位求反,末位加按位求反,末位加按位求反,末位加1 1 1 1 真值为:真值为:真值为:真值为:-65537!-65537!-65537!-65537! 为什么为什么为什么为什么-65537

34、-65537-65537-65537这个数在这个数在这个数在这个数在16161616位内存单元中的表示与在位内存单元中的表示与在位内存单元中的表示与在位内存单元中的表示与在32323232位位位位内存单元中的表示不相同呢?内存单元中的表示不相同呢?内存单元中的表示不相同呢?内存单元中的表示不相同呢? 这主要是因为这主要是因为这主要是因为这主要是因为-65537-65537-65537-65537这个数超出了这个数超出了这个数超出了这个数超出了16161616位内存单元表示数位内存单元表示数位内存单元表示数位内存单元表示数的范围的范围的范围的范围,所以实际存储的值(,所以实际存储的值(,所以实际

35、存储的值(,所以实际存储的值(-1-1-1-1)与要表示的值()与要表示的值()与要表示的值()与要表示的值(- - - -65537655376553765537)不同,但)不同,但)不同,但)不同,但-32767-32767-32767-32767并没有超出了并没有超出了并没有超出了并没有超出了32323232位内存单元表示数位内存单元表示数位内存单元表示数位内存单元表示数的范围,所以实际存储的值就是其本身。因此,我们在的范围,所以实际存储的值就是其本身。因此,我们在的范围,所以实际存储的值就是其本身。因此,我们在的范围,所以实际存储的值就是其本身。因此,我们在C C C C语语语语言中对

36、数据处理时必须要注意数据的表示范围,以免引起言中对数据处理时必须要注意数据的表示范围,以免引起言中对数据处理时必须要注意数据的表示范围,以免引起言中对数据处理时必须要注意数据的表示范围,以免引起不必要的错误不必要的错误不必要的错误不必要的错误。2. 整数在内存中的表示整数在内存中的表示八进制整数八进制整数八进制整数八进制整数 034:034:对于对于对于对于16161616位的内存单元位的内存单元位的内存单元位的内存单元: 034 = (011 100)034 = (011 100)034 = (011 100)034 = (011 100)2 2 2 2符号位符号位符号位符号位( ( ( (

37、表示正表示正表示正表示正) ) ) )00011100000111000 000000000000000低字节低字节高字节高字节低地址低地址高地址高地址符号位符号位八进制数八进制数034034两个字节的内存实际存放形式两个字节的内存实际存放形式 (034)(034)补补补补 = = 0 0000 000 00000000 0001 1100 0001 1100 对于对于对于对于32323232位的内存单元位的内存单元位的内存单元位的内存单元: (034)(034)补补补补 = = 0 0000 000 00000000 00000000 00000000 00000000 00000000 0

38、001 1100 0001 1100符号位符号位符号位符号位( ( ( (表示正表示正表示正表示正) ) ) )低字节低字节高字节高字节低地址低地址高地址高地址八进制数八进制数034034四个字节的内存实际存放形式四个字节的内存实际存放形式 0001110000011100000000000000000000000000000000000 000000000000000符号位符号位2. 整数在内存中的表示整数在内存中的表示八进制整数八进制整数八进制整数八进制整数 034:034:对于对于对于对于16161616位的内存单元位的内存单元位的内存单元位的内存单元:符号位符号位符号位符号位( ( (

39、 (表示负表示负表示负表示负) ) ) )11100100111001001 111111111111111低字节低字节高字节高字节低地址低地址高地址高地址符号位符号位八进制数八进制数-034-034两个字节的内存实际存放形式两个字节的内存实际存放形式 (+034)(+034)补补补补 = = 0 0000 000 00000000 0001 1100 0001 1100 (-034)(-034)补补补补 = = 1 1111 1111 1110 0100111 1111 1110 0100 按位求反,末位加按位求反,末位加按位求反,末位加按位求反,末位加1 1 1 1 对于对于对于对于323

40、23232位的内存单元位的内存单元位的内存单元位的内存单元:(+034)(+034)补补补补 = = 0 0000 000 00000000 00000000 00000000 00000000 00000000 0001 1100 0001 1100 按位求反,末位加按位求反,末位加按位求反,末位加按位求反,末位加1 1 1 1 (-034)(-034)补补补补 = = 1 1111 111 11111111 11111111 11111111 11111111 11111111 1110 0100 1110 0100符号位符号位符号位符号位( ( ( (表示负表示负表示负表示负) ) )

41、)1110010011100100111111111111111111111111111111111 111111111111111低字节低字节高字节高字节低地址低地址高地址高地址八进制数八进制数-034-034四个字节的内存实际存放形式四个字节的内存实际存放形式 符号位符号位2. 整数在内存中的表示整数在内存中的表示十六进制整数十六进制整数十六进制整数十六进制整数 0X8AB6:0X8AB6:对于对于对于对于16161616位的内存单元位的内存单元位的内存单元位的内存单元: 0X8AB6=(1000 1010 1011 0110)0X8AB6=(1000 1010 1011 0110)0X8

42、AB6=(1000 1010 1011 0110)0X8AB6=(1000 1010 1011 0110)2 2 2 2符号位符号位符号位符号位( ( ( (表示正表示正表示正表示正) ) ) )10110110101101101 100010100001010低字节低字节高字节高字节低地址低地址高地址高地址符号位符号位表示负表示负十六进制数十六进制数0X8AB60X8AB6两个字节的内存实际存放形式两个字节的内存实际存放形式 (0X8AB6)(0X8AB6)补补补补 = = 0 0 1000 1010 1011 01101000 1010 1011 0110 取取取取低低低低16161616

43、位位位位真值为:真值为:真值为:真值为:-30026 !-30026 !-30026 !-30026 ! 对于对于对于对于32323232位的内存单元位的内存单元位的内存单元位的内存单元: (0X8AB6)(0X8AB6)补补补补 = = 0 0000 000 00000000 00000000 00000000 1000 1010 1011 0110 1000 1010 1011 0110符号位符号位符号位符号位( ( ( (表示正表示正表示正表示正) ) ) )1011011010110110100010101000101000000000000000000 000000000000000

44、低字节低字节高字节高字节十六进制数十六进制数0X8AB60X8AB6四个字节的内存实际存放形式四个字节的内存实际存放形式 低地址低地址高地址高地址符号位符号位真值为:真值为:真值为:真值为:+35510 !+35510 !+35510 !+35510 !2. 整数在内存中的表示整数在内存中的表示十六进制整数十六进制整数十六进制整数十六进制整数 0X8AB6:0X8AB6:对于对于对于对于16161616位的内存单元位的内存单元位的内存单元位的内存单元:符号位符号位符号位符号位( ( ( (表示负表示负表示负表示负) ) ) )(+0X8AB6)(+0X8AB6)补补补补 = = 0 0 100

45、0 1010 1011 0110 1000 1010 1011 0110 (-0X8AB6)(-0X8AB6)补补补补 = = 1 1 0111 0101 0100 1010 0111 0101 0100 1010 按位求反,末位加按位求反,末位加按位求反,末位加按位求反,末位加1 1 1 1 01001010010010100 011101011110101低地址低地址高地址高地址十六进制数十六进制数-0X8AB6-0X8AB6两个字节的内存实际存放形式两个字节的内存实际存放形式 低字节低字节高字节高字节符号位符号位表示正表示正取取取取低低低低16161616位位位位真值为:真值为:真值为:

46、真值为:+30026 !+30026 !+30026 !+30026 ! 对于对于对于对于32323232位的内存单元位的内存单元位的内存单元位的内存单元: (+0X8AB6)(+0X8AB6)补补补补 = = 0 0000 000 00000000 00000000 00000000 1000 1010 1011 0110 1000 1010 1011 0110 按位求反,末位加按位求反,末位加按位求反,末位加按位求反,末位加1 1 1 1 (-0X8AB6)(-0X8AB6)补补补补 = = 1 1111 111 11111111 11111111 11111111 0111 0101 0

47、100 1010 0111 0101 0100 1010符号位符号位符号位符号位( ( ( (表示负表示负表示负表示负) ) ) )0100101001001010011101010111010111111111111111111 111111111111111低字节低字节高字节高字节十六进制数十六进制数-0X8AB6-0X8AB6四个字节的内存实际存放形式四个字节的内存实际存放形式 低地址低地址高地址高地址符号位符号位表示负表示负真值为:真值为:真值为:真值为:-35510 !-35510 !-35510 !-35510 !3. 整型变量整型变量整型变量的定义整型变量的定义整型变量的定义整型

48、变量的定义intintintint 变量名变量名变量名变量名 , 变量名变量名变量名变量名2 2 2 2,变量名变量名变量名变量名nnnn;intintintint必须小写必须小写必须小写必须小写至少一个空格至少一个空格至少一个空格至少一个空格必须为合法的标识符必须为合法的标识符必须为合法的标识符必须为合法的标识符以逗号以逗号以逗号以逗号, , , ,分隔分隔分隔分隔以分号以分号以分号以分号; ; ; ;结尾结尾结尾结尾定义时可以赋初值,方法:在变量名后面增加定义时可以赋初值,方法:在变量名后面增加定义时可以赋初值,方法:在变量名后面增加定义时可以赋初值,方法:在变量名后面增加“= = = =

49、 数值数值数值数值” 例:例: int a; int x, y, z; int m = 2, y = -3; 当程序中定义了一个变量时,计算机会为这个变量当程序中定义了一个变量时,计算机会为这个变量当程序中定义了一个变量时,计算机会为这个变量当程序中定义了一个变量时,计算机会为这个变量分配一个相应大小的内存单元。因此,这个变量是有值分配一个相应大小的内存单元。因此,这个变量是有值分配一个相应大小的内存单元。因此,这个变量是有值分配一个相应大小的内存单元。因此,这个变量是有值的,它的值就是对应内存单元的值。如果定义时没有赋的,它的值就是对应内存单元的值。如果定义时没有赋的,它的值就是对应内存单元

50、的值。如果定义时没有赋的,它的值就是对应内存单元的值。如果定义时没有赋初值,则这个值程序员是无法预知的。初值,则这个值程序员是无法预知的。初值,则这个值程序员是无法预知的。初值,则这个值程序员是无法预知的。 整型变量的分类整型变量的分类整型变量的分类整型变量的分类 修饰符修饰符修饰符修饰符 控制变量是否有符号:控制变量是否有符号:控制变量是否有符号:控制变量是否有符号:signedsignedsignedsigned(有符号)和(有符号)和(有符号)和(有符号)和unsignedunsignedunsignedunsigned(无符号)(无符号)(无符号)(无符号) 控制整型变量的值域范围控制

51、整型变量的值域范围控制整型变量的值域范围控制整型变量的值域范围 :shortshortshortshort(短)和(短)和(短)和(短)和longlonglonglong(长)。(长)。(长)。(长)。 有符号基本型(有符号基本型(有符号基本型(有符号基本型(intintintint) intintintint a = -2; a = -2; a = -2; a = -2; /定义一个有符号整型变量定义一个有符号整型变量定义一个有符号整型变量定义一个有符号整型变量a a a a,并赋初值,并赋初值,并赋初值,并赋初值-2-2-2-2 占一个机器字大小的内存单元。占一个机器字大小的内存单元。占一

52、个机器字大小的内存单元。占一个机器字大小的内存单元。TCTCTCTC或或或或BC3.1BC3.1BC3.1BC3.1下下下下, , , ,变量占变量占变量占变量占2 2 2 2个字节(个字节(个字节(个字节(16161616位)的内存单元;位)的内存单元;位)的内存单元;位)的内存单元;VC6.0VC6.0VC6.0VC6.0下,变量占下,变量占下,变量占下,变量占4 4 4 4个字节(个字节(个字节(个字节(32323232位)的内存单元。位)的内存单元。位)的内存单元。位)的内存单元。 如果定义变量时,不指定如果定义变量时,不指定如果定义变量时,不指定如果定义变量时,不指定signedsi

53、gnedsignedsigned,也不指定,也不指定,也不指定,也不指定unsignedunsignedunsignedunsigned,则默认为,则默认为,则默认为,则默认为signedsignedsignedsigned(有符号)(有符号)(有符号)(有符号) 11111110111111101 111111111111111低地址低地址高地址高地址低字节低字节高字节高字节符号位符号位符号位符号位变量变量变量变量a a占用占用占用占用的内存单元的内存单元的内存单元的内存单元(2(2字节字节字节字节) )有符号整型变量在内存中的实际存放形式有符号整型变量在内存中的实际存放形式( (假设在假设

54、在BC3.1BC3.1下下) ) 无符号基本型(无符号基本型(无符号基本型(无符号基本型(unsigned unsigned unsigned unsigned intintintint或或或或unsignedunsignedunsignedunsigned) unsigned unsigned intint a = 2; a = 2; /定义一个无符号整型变量定义一个无符号整型变量定义一个无符号整型变量定义一个无符号整型变量a a a a,并赋初值,并赋初值,并赋初值,并赋初值2 2 2 2 或或或或 unsigned a = 2;unsigned a = 2; 占用的内存单元字节数同占用的

55、内存单元字节数同占用的内存单元字节数同占用的内存单元字节数同intintintint类型。与类型。与类型。与类型。与intintintint a = 2; a = 2; a = 2; a = 2;等价。等价。等价。等价。 unsigned unsigned intint a = -2; a = -2; /定义一个无符号整型变量定义一个无符号整型变量定义一个无符号整型变量定义一个无符号整型变量a a a a,并赋初值,并赋初值,并赋初值,并赋初值-2-2-2-2 或或或或 unsigned a = -2;unsigned a = -2;11111110111111101 111111111111

56、111无符号整型变量在内存中的实际存放形式无符号整型变量在内存中的实际存放形式( (假设在假设在BC3.1BC3.1下下) ) 低字节低字节高字节高字节低地址低地址高地址高地址数据位数据位数据位数据位变量变量变量变量a a占用占用占用占用的内存单元的内存单元的内存单元的内存单元(2(2字节字节字节字节) )其值为:其值为:其值为:其值为:65534 !65534 !65534 !65534 ! 注意:注意:对于有符号数也好还是无符号数也好,其实在计对于有符号数也好还是无符号数也好,其实在计算机内存中表示是不加区分的,都是以其补码形式表示,只算机内存中表示是不加区分的,都是以其补码形式表示,只是

57、我们怎样看待最高二进制位的问题,如果把最高位当成符是我们怎样看待最高二进制位的问题,如果把最高位当成符号位看待,则为有符号数,如果把最高位当成数据位看待,号位看待,则为有符号数,如果把最高位当成数据位看待,则变为无符号数。则变为无符号数。例如:例如:unsigned unsigned intint a = -2 a = -2; printf(“%dprintf(“%d” ”,a)a);-有符号输出,则为有符号输出,则为有符号输出,则为有符号输出,则为-2-2 printf(“%uprintf(“%u” ”,a)a);-无符号输出,则为无符号输出,则为无符号输出,则为无符号输出,则为655346

58、5534 有符号短整型(有符号短整型(有符号短整型(有符号短整型(short short short short intintintint或或或或shortshortshortshort) short short intint a = 2; a = 2; /定义一个有符号短整型变量定义一个有符号短整型变量定义一个有符号短整型变量定义一个有符号短整型变量a a a a,并赋初值,并赋初值,并赋初值,并赋初值2 2 2 2 或或或或 short a = 2;short a = 2; 占用的内存单元为占用的内存单元为占用的内存单元为占用的内存单元为2 2 2 2个字节,无论是个字节,无论是个字节,无

59、论是个字节,无论是TCTCTCTC、BCBCBCBC,还是,还是,还是,还是VCVCVCVC。 无符号短整型(无符号短整型(无符号短整型(无符号短整型(unsigned short unsigned short unsigned short unsigned short intintintint或或或或unsigned shortunsigned shortunsigned shortunsigned short) unsigned short unsigned short intint a = 2; a = 2; /定义一个无符号短整型变量定义一个无符号短整型变量定义一个无符号短整型变量定义

60、一个无符号短整型变量a a a a,并赋初值,并赋初值,并赋初值,并赋初值2 2 2 2 或或或或 unsigned short a = 2;unsigned short a = 2; 占用的内存单元字节数同占用的内存单元字节数同占用的内存单元字节数同占用的内存单元字节数同shortshortshortshort类型。类型。类型。类型。 在在在在TC2.0TC2.0TC2.0TC2.0和和和和BC3.1BC3.1BC3.1BC3.1下,下,下,下,unsigned shortunsigned shortunsigned shortunsigned short类型与类型与类型与类型与unsign

61、ed unsigned unsigned unsigned intintintint类型是等价的类型是等价的类型是等价的类型是等价的 。 有符号长整型(有符号长整型(有符号长整型(有符号长整型(long long long long intintintint或或或或longlonglonglong) long long intint a = 234567; a = 234567; /定义一个有符号长整型变量定义一个有符号长整型变量定义一个有符号长整型变量定义一个有符号长整型变量a a a a,并赋初值,并赋初值,并赋初值,并赋初值234567234567234567234567 或或或或 lo

62、ng a = 234567;long a = 234567; 占用的内存单元为占用的内存单元为占用的内存单元为占用的内存单元为4 4 4 4个字节,无论是个字节,无论是个字节,无论是个字节,无论是TCTCTCTC、BCBCBCBC,还是,还是,还是,还是VCVCVCVC。 无符号长整型(无符号长整型(无符号长整型(无符号长整型(unsigned long unsigned long unsigned long unsigned long intintintint或或或或unsigned longunsigned longunsigned longunsigned long) unsigned

63、long unsigned long intint a = 2; a = 2; /定义一个无符号长整型变量定义一个无符号长整型变量定义一个无符号长整型变量定义一个无符号长整型变量a a a a,并赋初值,并赋初值,并赋初值,并赋初值2 2 2 2 或或或或 unsigned long a = 2;unsigned long a = 2; 占用的内存单元字节数同占用的内存单元字节数同占用的内存单元字节数同占用的内存单元字节数同longlonglonglong类型。类型。类型。类型。 在在在在VCVCVCVC中中中中longlonglonglong与与与与intintintint类型基本相同,均占

64、四个字节的内类型基本相同,均占四个字节的内类型基本相同,均占四个字节的内类型基本相同,均占四个字节的内存单元;但在存单元;但在存单元;但在存单元;但在TCTCTCTC或或或或BCBCBCBC中,中,中,中,longlonglonglong类型与类型与类型与类型与intintintint类型只是所占字类型只是所占字类型只是所占字类型只是所占字节不同外(节不同外(节不同外(节不同外(longlonglonglong占占占占4 4 4 4字节,字节,字节,字节,intintintint占占占占2 2 2 2字节),其它数据处理字节),其它数据处理字节),其它数据处理字节),其它数据处理方法是一样的。

65、方法是一样的。方法是一样的。方法是一样的。 【例例例例】各种整型变量的定义各种整型变量的定义各种整型变量的定义各种整型变量的定义 #include #include #define SUM 65535#define SUM 65535void main ( )void main ( ) intint a, b = 20 a, b = 20; unsigned unsigned intint c = 0xff; c = 0xff; long D; long D; a = SUM; a = SUM; D = 301; D = 301; printf(aprintf(a = % = %dndn, a

66、), a); printf(bprintf(b = % = %dndn, b), b); printf(cprintf(c = % = %dndn, c), c); printf(“Dprintf(“D = % = %dndn”, D)”, D); /文件包含文件包含, ,头文件说明头文件说明 /定义符号常量定义符号常量SUMSUM,值为,值为6553565535 /定义两个定义两个intint型变量型变量a a和和b b,b b赋初值赋初值2020 /定义无符号整型变量定义无符号整型变量c c,并赋初值,并赋初值0xff0xff /定义长整型变量定义长整型变量D D /对对a a赋值为赋值为

67、SUMSUM,这时,这时a a的值是的值是6553565535 /对对D D赋值为赋值为301301 /以有符号十进制形式(以有符号十进制形式(%d%d)显示)显示a a的值的值 /以有符号十进制形式(以有符号十进制形式(“%d”%d”)显示)显示b b的值的值 /以有符号十进制形式(以有符号十进制形式(%d%d)显示)显示c c的值的值 /以有符号十进制形式(以有符号十进制形式(%d%d)显示)显示D D的值的值 变量定变量定变量定变量定义部分义部分义部分义部分语句执行部分语句执行部分语句执行部分语句执行部分在在在在BC3.1BC3.1BC3.1BC3.1下运行结果:下运行结果:下运行结果:

68、下运行结果: a = -1a = -1 b = 20 b = 20 c = 255 c = 255 D = 301 D = 301在在在在VC6.0VC6.0VC6.0VC6.0下运行结果:下运行结果:下运行结果:下运行结果: a = 65535a = 65535 b = 20 b = 20 c = 255 c = 255 D = 301 D = 301 对对对对于于于于16161616位位位位的的的的有有有有符符符符号号号号整整整整型型型型变变变变量量量量a a a a来来来来说说说说 , 因因因因 65535655356553565535在在在在 内内内内 存存存存 中中中中 的的的的 形

69、形形形 式式式式 为为为为1 1 1 1111111111111111111111111111111111111111111111111111111111111,最最最最高高高高位位位位为为为为1 1 1 1表表表表示示示示负,则其所对应的十进制数就为负,则其所对应的十进制数就为负,则其所对应的十进制数就为负,则其所对应的十进制数就为-1-1-1-1。4. 整数常量的分类整数常量的分类 根据其值所在范围确定其数据类型根据其值所在范围确定其数据类型根据其值所在范围确定其数据类型根据其值所在范围确定其数据类型。在。在。在。在TC2.0TC2.0TC2.0TC2.0或或或或BC3.1BC3.1BC3

70、.1BC3.1下,下,下,下,如果整型常量的值位于如果整型常量的值位于如果整型常量的值位于如果整型常量的值位于-32768-32768-32768-3276832767327673276732767之间,之间,之间,之间,C C C C语言认为它是语言认为它是语言认为它是语言认为它是intintintint型常量;如果整型常量的值位于型常量;如果整型常量的值位于型常量;如果整型常量的值位于型常量;如果整型常量的值位于-2147483648-2147483648-2147483648-21474836482147483647214748364721474836472147483647之间,之间,

71、之间,之间,C C C C语言认为它是语言认为它是语言认为它是语言认为它是longlonglonglong型常量。型常量。型常量。型常量。 整型常量后加字母整型常量后加字母整型常量后加字母整型常量后加字母l l l l或或或或L L L L,认为它是,认为它是,认为它是,认为它是long long long long intintintint 型常量型常量型常量型常量。比。比。比。比如如如如123L123L123L123L、45l45l45l45l、0XAFL0XAFL0XAFL0XAFL。 无符号数也可用后缀表示,整型常数的无符号数的后缀为无符号数也可用后缀表示,整型常数的无符号数的后缀为无

72、符号数也可用后缀表示,整型常数的无符号数的后缀为无符号数也可用后缀表示,整型常数的无符号数的后缀为U U U U或或或或u u u u。例如:例如:例如:例如:358u358u358u358u, 0x38Au0x38Au0x38Au0x38Au,235Lu 235Lu 235Lu 235Lu 均为无符号数。均为无符号数。均为无符号数。均为无符号数。 前缀、后缀可同时使用以表示各种类型的数。如前缀、后缀可同时使用以表示各种类型的数。如前缀、后缀可同时使用以表示各种类型的数。如前缀、后缀可同时使用以表示各种类型的数。如0XA5Lu0XA5Lu0XA5Lu0XA5Lu表示表示表示表示十六进制无符号长

73、整数十六进制无符号长整数十六进制无符号长整数十六进制无符号长整数A5A5A5A5,其十进制为,其十进制为,其十进制为,其十进制为165165165165。其实整型常数这。其实整型常数这。其实整型常数这。其实整型常数这种表示无符号数意义不大,在机器内部它还是用其补码表示,种表示无符号数意义不大,在机器内部它还是用其补码表示,种表示无符号数意义不大,在机器内部它还是用其补码表示,种表示无符号数意义不大,在机器内部它还是用其补码表示,例如例如例如例如-1U-1U-1U-1U和和和和-1-1-1-1在内存中表示是一样的在内存中表示是一样的在内存中表示是一样的在内存中表示是一样的, , , ,数据处理也

74、一样数据处理也一样数据处理也一样数据处理也一样, , , ,所以有所以有所以有所以有的教科书上说的教科书上说的教科书上说的教科书上说“常量无常量无常量无常量无unsignedunsignedunsignedunsigned类型类型类型类型”,其实有,但无意义。,其实有,但无意义。,其实有,但无意义。,其实有,但无意义。5. 实型数据实型数据 实型常量(实数或浮点数)实型常量(实数或浮点数)实型常量(实数或浮点数)实型常量(实数或浮点数) l l 十进制小数形式:十进制小数形式:十进制小数形式:十进制小数形式:由数字由数字由数字由数字0 0 0 09 9 9 9和小数点组成和小数点组成和小数点组

75、成和小数点组成 . . 如如如如:0.0,5.6,-:0.0,5.6,-:0.0,5.6,-:0.0,5.6,-5.5.5.5.l l指数形式:由十进制数,加阶码标志指数形式:由十进制数,加阶码标志指数形式:由十进制数,加阶码标志指数形式:由十进制数,加阶码标志e e e e或或或或E E E E以及阶码(只能为整以及阶码(只能为整以及阶码(只能为整以及阶码(只能为整数,可以带符号)组成数,可以带符号)组成数,可以带符号)组成数,可以带符号)组成. . . . 其一般形式为:其一般形式为:其一般形式为:其一般形式为:aEnaEnaEnaEn 其中:其中:其中:其中:a a a a为十进制数,为

76、十进制数,为十进制数,为十进制数,n n n n为十进制整数,都不可缺少。其可表为十进制整数,都不可缺少。其可表为十进制整数,都不可缺少。其可表为十进制整数,都不可缺少。其可表示为示为示为示为a a a a1010n n合法的实数表示:合法的实数表示:合法的实数表示:合法的实数表示: 2.1E5 2.1E5 2.1E5 2.1E5 表示表示表示表示2.1102.1102.1102.1105 5 5 5,3.7E-2 3.7E-2 3.7E-2 3.7E-2 表示表示表示表示3.7103.7103.7103.710-2-2-2-2。 非法的实数表示:非法的实数表示:非法的实数表示:非法的实数表示

77、: 345345345345( ( ( (无小数点无小数点无小数点无小数点) ,E7E7E7E7( ( ( (阶码标志阶码标志阶码标志阶码标志E E E E之前无数字之前无数字之前无数字之前无数字) ) ) ) , -5-5-5-5( ( ( (无阶码标志无阶码标志无阶码标志无阶码标志) ) ) ) ,50.-E350.-E350.-E350.-E3( ( ( (负号位置不对负号位置不对负号位置不对负号位置不对) ) ) ) 实型变量实型变量实型变量实型变量 l l 单精度实型(单精度实型(单精度实型(单精度实型(floatfloat) float f = 3.14, g;float f =

78、3.14, g; 这种定义的变量在内存中占这种定义的变量在内存中占这种定义的变量在内存中占这种定义的变量在内存中占4 4 4 4个字节(个字节(个字节(个字节(32323232位)的存储单元。位)的存储单元。位)的存储单元。位)的存储单元。l l双精度实型双精度实型双精度实型双精度实型(doubledouble) double x, y;double x, y; 这种定义的变量在内存中占这种定义的变量在内存中占这种定义的变量在内存中占这种定义的变量在内存中占8 8 8 8个字节(个字节(个字节(个字节(64646464位)的存储单元。位)的存储单元。位)的存储单元。位)的存储单元。 l l长双

79、精度实型长双精度实型长双精度实型长双精度实型(long doublelong double) long double x, y;long double x, y; 在在在在TCTCTCTC或或或或BCBCBCBC下,这种定义的变量在内存中占下,这种定义的变量在内存中占下,这种定义的变量在内存中占下,这种定义的变量在内存中占10101010个字节(个字节(个字节(个字节(80808080位)位)位)位)的存储单元;在的存储单元;在的存储单元;在的存储单元;在VCVCVCVC下则占下则占下则占下则占8 8 8 8个字节(个字节(个字节(个字节(64646464位)。位)。位)。位)。 注意:注意:

80、注意:注意:三种实数类型中,其精度是三种实数类型中,其精度是三种实数类型中,其精度是三种实数类型中,其精度是 float double float double long double long double;long floatlong float实际上就是实际上就是实际上就是实际上就是doubledouble, , , ,因此,没有因此,没有因此,没有因此,没有long floatlong float类型;类型;类型;类型;所有的实型常量按照所有的实型常量按照所有的实型常量按照所有的实型常量按照doubledouble类型处理。类型处理。类型处理。类型处理。5. 实型数据实型数据 实型数据

81、的精度实型数据的精度实型数据的精度实型数据的精度 类类类类 型型型型精确表示的数字个数精确表示的数字个数精确表示的数字个数精确表示的数字个数 float float 7 7 8 8 double double 16 16 1717 long double long double 17 17 1818#include #include void main ( )void main ( ) float a; float a; /定义定义定义定义floatfloatfloatfloat型变量型变量型变量型变量a a a a double b, c; double b, c; /定义定义定义定义dou

82、bledoubledoubledouble型变量型变量型变量型变量b b b b和和和和c c c c a = 123.456789; a = 123.456789; /对变量对变量对变量对变量a a a a赋值为赋值为赋值为赋值为123.456789123.456789123.456789123.456789 b = a; b = a; /将变量将变量将变量将变量a a a a赋给变量赋给变量赋给变量赋给变量b b b b c = 123.456789; c = 123.456789; /对变量对变量对变量对变量c c c c赋值为赋值为赋值为赋值为123.456789123.4567891

83、23.456789123.456789 printf(aprintf(a = %f b = %lf c = %lfn, a, b, = %f b = %lf c = %lfn, a, b, c);c); abc123.456787123.456787123.456789a = 123.456787 b = 123.456787 c = 123.456789a = 123.456787 b = 123.456787 c = 123.456789 floatfloatfloatfloat型变量最多只能精确表型变量最多只能精确表型变量最多只能精确表型变量最多只能精确表示示示示8 8 8 8个数字,因

84、此显示个数字,因此显示个数字,因此显示个数字,因此显示a a a a的值时,的值时,的值时,的值时,只能有效显示前面只能有效显示前面只能有效显示前面只能有效显示前面8 8 8 8个数字即个数字即个数字即个数字即123.45678123.45678123.45678123.45678,最后追加一位数字,最后追加一位数字,最后追加一位数字,最后追加一位数字7 7 7 7是随机的是随机的是随机的是随机的 6. 字符型数据和字符串常量字符型数据和字符串常量 字符型常量字符型常量字符型常量字符型常量 l l 定义:定义:定义:定义:用用用用单引号单引号单引号单引号括起来的单个括起来的单个括起来的单个括起

85、来的单个普通字符普通字符普通字符普通字符或或或或转义字符转义字符转义字符转义字符. . . . 如 a A ? n 101l l 字符常量的值:字符常量的值:字符常量的值:字符常量的值:该字符的该字符的该字符的该字符的ASCIIASCIIASCIIASCII码码码码值值值值如 A65, a97, 048 , n10l l 转义字符转义字符转义字符转义字符: : : :反斜线后面跟一个字符或一个代码值表示反斜线后面跟一个字符或一个代码值表示反斜线后面跟一个字符或一个代码值表示反斜线后面跟一个字符或一个代码值表示转义字符及其含义:转义字符及其含义:转义字符及其含义:转义字符及其含义:转义字符转义字

86、符含义含义nvradddtbf“xhh转义字符转义字符含义含义换行垂直制表回车响铃单引号3位8进制数代表的字符水平制表退格换页反斜线双引号2位16进制数代表的字符如 101 -A 012 -n 376 - x61 -a 60 -0 483 -()例:A-101-x41-65例:例:例:例: 转义字符举例转义字符举例转义字符举例转义字符举例 #include #include void main ( )void main ( ) printfprintf (101 x42 Cn); (101 x42 Cn); printfprintf (I say:How are you?n); (I say:

87、How are you?n); printfprintf (C Programn); (C Programn); printfprintf (Visual C); (Visual C); 运行结果:运行结果:运行结果:运行结果:( ( ( (屏幕显示屏幕显示屏幕显示屏幕显示) ) ) )A B CA B CI I say:”Howsay:”How are you?” are you?”C ProgramC ProgramVisual CVisual C例例例例: : void main ( )void main ( ) printf(“Ybprintf(“Yb=n”);=n”); 运行结果:运

88、行结果:运行结果:运行结果:屏幕显示:屏幕显示:屏幕显示:屏幕显示:= = = =打印机输出:打印机输出:打印机输出:打印机输出: 字符串常量字符串常量字符串常量字符串常量l l 定义:定义:定义:定义:用双引号用双引号用双引号用双引号(“”)(“”)(“”)(“”)括起来的字符序列括起来的字符序列括起来的字符序列括起来的字符序列l l 存储:存储:存储:存储:每个字符串尾每个字符串尾每个字符串尾每个字符串尾自动自动自动自动加一个加一个加一个加一个 0 0 0 0 作为字作为字作为字作为字符串结束标志符串结束标志符串结束标志符串结束标志例例例例1: 1: 1: 1: 字符串字符串字符串字符串“

89、HELLO”HELLO”HELLO”HELLO”在内存中在内存中在内存中在内存中0x480x480x450x450x4C0x4C0x4C0x4C0x4F0x4F0 0低地址低地址低地址低地址高地址高地址高地址高地址HH EE LL LL OO 00字符串结束标志字符串结束标志例例例例2: 2: 2: 2: 空串空串空串空串 “”“”0l l 字符常量与字符串常量不同字符常量与字符串常量不同字符常量与字符串常量不同字符常量与字符串常量不同0x41 0x41 0例例例例 AAAA“ “A”A”例: char ch; ch = “A”; 例: char ch; ch = A; 字符型变量字符型变量字

90、符型变量字符型变量l l 字符型数据类型符是字符型数据类型符是字符型数据类型符是字符型数据类型符是charcharcharchar(字符(字符(字符(字符charactercharactercharactercharacter)l l 在内存中占在内存中占在内存中占在内存中占1 1 1 1个字节(个字节(个字节(个字节(8 8 8 8位)位)位)位) l l 字符变量存放字符字符变量存放字符字符变量存放字符字符变量存放字符ASCIIASCIIASCIIASCII码码码码l l charcharcharchar与与与与intintintint数据间可进行算术运算数据间可进行算术运算数据间可进行算

91、术运算数据间可进行算术运算l l 存在有符号和无符号之分。默认情况下为有符号存在有符号和无符号之分。默认情况下为有符号存在有符号和无符号之分。默认情况下为有符号存在有符号和无符号之分。默认情况下为有符号 例:例:例:例: char char chch; ; unsigned char C = B; unsigned char C = B;例:例:例:例: a = D; a = D; / a = 68;/ a = 68; x = A + 5; x = A + 5; / x = 65 + 5;/ x = 65 + 5; s = ! + G s = ! + G / s = 33 + 71;/ s =

92、 33 + 71; 没有没有没有没有字符串变量字符串变量字符串变量字符串变量,用字符数组存放,用字符数组存放,用字符数组存放,用字符数组存放7. 简单数据类型的表示范围简单数据类型的表示范围 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 10 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 最大值:最大值:最大值:最大值:+32767+327671 0 0 0 0 0 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 最小值:最小值:最小值:最小值:-32768-32768intint符号位符号位符号位符号位十六位整

93、型数所表示的数据范围十六位整型数所表示的数据范围十六位整型数所表示的数据范围十六位整型数所表示的数据范围 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 最大值:最大值:最大值:最大值:65535655350 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 最小值:最小值:最小值:最小值:0 0unsignedunsigned intint数据位数据位数据位数据位类类型型型型符符符符号号号号关关关关键键字字字字占字占字占字占字节节数数数数数的表

94、示范数的表示范数的表示范数的表示范围围整整整整型型型型有有有有(signedsigned)intint 在在在在1616位系位系位系位系统统下下下下2 2-32768-3276832767327673276732767 在在在在3232位系位系位系位系统统下下下下4 4-2147483648-2147483648-2147483648-21474836482147483647214748364721474836472147483647(signedsigned)shortshort2 2-32768-3276832767327673276732767(signedsigned)longlong

95、4 4-2147483648-2147483648-2147483648-21474836482147483647214748364721474836472147483647无无无无unsigned unsigned intint 在在在在1616位系位系位系位系统统下下下下2 20 065535655356553565535 在在在在3232位系位系位系位系统统下下下下4 40 04294967295429496729542949672954294967295unsigned shortunsigned short2 20 065535655356553565535unsigned long

96、unsigned long4 40 04294967295429496729542949672954294967295实实型型型型有有有有floatfloat4 4绝对值绝对值1010-37-371010101038383838有有有有doubledouble8 8绝对值绝对值1010-307-30710101010308308308308有有有有long doublelong double1010绝对值绝对值1010-4931-4931101010104932493249324932字符型字符型字符型字符型有有有有charchar1 1-128-128127127127127无无无无unsi

97、gned charunsigned char1 10 0255255255255【例例例例】变量的存储范围变量的存储范围变量的存储范围变量的存储范围#include #include void main ( )void main ( ) char char chch; ; intint x; x; chch = 80 + 50; = 80 + 50; x = 80 + 50; x = 80 + 50; printfprintf ( (chch = % = %dndn, , chch); ); printfprintf (x = % (x = %dndn, x);, x); chch = -12

98、6 = -126x = 130x = 130为什么为什么?十进制数十进制数 对应的机器数(补码)对应的机器数(补码) 80 80 0 0 0 0 00 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 chch + + 50 50 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 1 1 0 0 1 0 0 1 1 0 0 1 0 0 0 0 0 00 0 0 0 0 0 0 10 0 0 0 1 0 0 0 0 0 1 00 0 0 0 0 1 01 0 0 0 0 0 1 0符号位符号位符号位符号位真值:真值:真值

99、:真值:-126-126-126-1268. 简单的数据输出简单的数据输出 C C C C语言中没有用于输出的语句,只能通过标准库函数的调语言中没有用于输出的语句,只能通过标准库函数的调语言中没有用于输出的语句,只能通过标准库函数的调语言中没有用于输出的语句,只能通过标准库函数的调用来完成数据的输出任务。库函数的一般调用格式为:用来完成数据的输出任务。库函数的一般调用格式为:用来完成数据的输出任务。库函数的一般调用格式为:用来完成数据的输出任务。库函数的一般调用格式为:函数名(参数函数名(参数函数名(参数函数名(参数1 1 1 1,参数,参数,参数,参数2 2 2 2,参数,参数,参数,参数n

100、 n n n);););); printfprintfprintfprintf函数:函数:函数:函数:printf(variable a = %d , a ););参数参数参数参数1 1 1 1( ( ( (字符串常量字符串常量字符串常量字符串常量) ) ) )函数名函数名函数名函数名参数参数参数参数2 2 2 2( ( ( (变量变量变量变量) ) ) )逗号隔开逗号隔开逗号隔开逗号隔开分号结束分号结束分号结束分号结束例:例:例:例:printfprintf(How are youHow are you! ););输出:输出:输出:输出:How are youHow are you!例:例:

101、例:例:intint a = 100 a = 100; printfprintf(variable a = %dvariable a = %d,a a););输出:输出:输出:输出:variable a = 100variable a = 100%d%d%d%d:用于显示有符号整型数据,如用于显示有符号整型数据,如用于显示有符号整型数据,如用于显示有符号整型数据,如intintintint、shortshortshortshort型数据;型数据;型数据;型数据;%u%u%u%u:用于显示无符号整型数据,如用于显示无符号整型数据,如用于显示无符号整型数据,如用于显示无符号整型数据,如unsign

102、ed unsigned unsigned unsigned intintintint、unsigned shortunsigned shortunsigned shortunsigned short型数型数型数型数据;据;据;据;%f%f%f%f:用于显示实型数据,如用于显示实型数据,如用于显示实型数据,如用于显示实型数据,如floatfloatfloatfloat型数据;型数据;型数据;型数据;%c%c%c%c:用于显示字符型数据,如用于显示字符型数据,如用于显示字符型数据,如用于显示字符型数据,如charcharcharchar型数据;型数据;型数据;型数据;%s%s%s%s:用于显示字符

103、串数据。用于显示字符串数据。用于显示字符串数据。用于显示字符串数据。格式控制符格式控制符格式控制符格式控制符例:简单的数据输出例:简单的数据输出 #include #include void main ( )void main ( ) intint a, b; a, b; unsigned unsigned intint u; u; long L; long L; char char chch; ; float f; float f; a = 200; a = 200; b = -1; b = -1; u = b; u = b; L = u; L = u; chch = A; = A; f =

104、 32.17; f = 32.17; printf(aprintf(a = % = %dt,adt,a); ); printf(bprintf(b = % = %dn,bdn,b); ); printf(uprintf(u = % = %ut,uut,u); ); printf(Lprintf(L= %ld= %ldn,Ln,L); ); printf(fprintf(f = % = %fn,ffn,f); ); printf(chprintf(ch is %c and value is % is %c and value is %dndn, , chch, , chch); ); print

105、f(Iprintf(I love C language! love C language!rYounrYoun); ); /I/I后有三个空格后有三个空格 在在在在VCVCVCVC下:下:下:下:a = 200 b = -1a = 200 b = -1u = 4294967295 L = -1u = 4294967295 L = -1f = 32.169998f = 32.169998chch is A and value is 65 is A and value is 65You love C language!You love C language!在在在在BCBCBCBC下:下:下:下:

106、a = 200 b = -1a = 200 b = -1u = 65535 L = 65535u = 65535 L = 65535f = 32.169998f = 32.169998chch is A and value is 65 is A and value is 65You love C languageYou love C language! !b b b b的值是的值是的值是的值是-1-1-1-1,在内存中表示为:,在内存中表示为:,在内存中表示为:,在内存中表示为:0xffff0xffff0xffff0xffff(BCBCBCBC下),下),下),下),0xffffffff0xf

107、fffffff0xffffffff0xffffffff(VCVCVCVC下),下),下),下),当它赋给当它赋给当它赋给当它赋给u u u u时,由于时,由于时,由于时,由于u u u u是无符号数,因此是无符号数,因此是无符号数,因此是无符号数,因此u u u u的值是的值是的值是的值是65535655356553565535(BCBCBCBC下),下),下),下),4294967295429496729542949672954294967295(VCVCVCVC下)。下)。下)。下)。L L L L是有符号长整型,是有符号长整型,是有符号长整型,是有符号长整型,u u u u是无符号整型。

108、在是无符号整型。在是无符号整型。在是无符号整型。在BCBCBCBC下,下,下,下,L L L L占占占占4 4 4 4字节,字节,字节,字节,u u u u占占占占2 2 2 2字节,当把字节,当把字节,当把字节,当把u u u u赋值给赋值给赋值给赋值给L L L L时,时,时,时,L L L L的高的高的高的高2 2 2 2个字节为全个字节为全个字节为全个字节为全0 0 0 0(因(因(因(因u u u u无符号),故无符号),故无符号),故无符号),故L L L L的值为的值为的值为的值为0x0000ffff0x0000ffff0x0000ffff0x0000ffff,即,即,即,即65

109、535655356553565535。但在。但在。但在。但在VCVCVCVC下下下下, L, L, L, L和和和和u u u u都占都占都占都占4 4 4 4字字字字节,当把节,当把节,当把节,当把u u u u赋值给赋值给赋值给赋值给L L L L时,时,时,时,L L L L的值为的值为的值为的值为0xffffffff0xffffffff0xffffffff0xffffffff,即,即,即,即- - - -1 1 1 1。2.4 C语言的运算符与表达式语言的运算符与表达式 变量用来存放数据,运算符则用来处理数据。用运算符变量用来存放数据,运算符则用来处理数据。用运算符变量用来存放数据,运

110、算符则用来处理数据。用运算符变量用来存放数据,运算符则用来处理数据。用运算符将变量和常量连接起来的符合将变量和常量连接起来的符合将变量和常量连接起来的符合将变量和常量连接起来的符合C C C C语法规则的式子被称为语法规则的式子被称为语法规则的式子被称为语法规则的式子被称为表达式。表达式。表达式。表达式。 运算符的分类:运算符的分类:运算符的分类:运算符的分类: 单目运算符:只带一个操作数的运算符。如:单目运算符:只带一个操作数的运算符。如:单目运算符:只带一个操作数的运算符。如:单目运算符:只带一个操作数的运算符。如:+、-运算符。运算符。运算符。运算符。 双目运算符:带两个操作数的运算符。

111、如:双目运算符:带两个操作数的运算符。如:双目运算符:带两个操作数的运算符。如:双目运算符:带两个操作数的运算符。如:+ + + +、- - - -运算符。运算符。运算符。运算符。 三目运算符:带三个操作数的运算符。如:三目运算符:带三个操作数的运算符。如:三目运算符:带三个操作数的运算符。如:三目运算符:带三个操作数的运算符。如:? ? ? ?运算符。运算符。运算符。运算符。 学习运算符时应注意:学习运算符时应注意:学习运算符时应注意:学习运算符时应注意: 运算符的功能:该运算符主要用于做什么运算。运算符的功能:该运算符主要用于做什么运算。运算符的功能:该运算符主要用于做什么运算。运算符的功

112、能:该运算符主要用于做什么运算。与运算量关系:要求运算量的个数及运算量的类型。与运算量关系:要求运算量的个数及运算量的类型。与运算量关系:要求运算量的个数及运算量的类型。与运算量关系:要求运算量的个数及运算量的类型。运算符的优先级:表达式中包含多个不同运算符时运算符运算的先运算符的优先级:表达式中包含多个不同运算符时运算符运算的先运算符的优先级:表达式中包含多个不同运算符时运算符运算的先运算符的优先级:表达式中包含多个不同运算符时运算符运算的先后次序。后次序。后次序。后次序。运算符的结合性:同级别运算符的运算顺序(指左结合性还是右结运算符的结合性:同级别运算符的运算顺序(指左结合性还是右结运算

113、符的结合性:同级别运算符的运算顺序(指左结合性还是右结运算符的结合性:同级别运算符的运算顺序(指左结合性还是右结合性)。合性)。合性)。合性)。运算结果的类型:表达式运算后最终所得到的值的类型。运算结果的类型:表达式运算后最终所得到的值的类型。运算结果的类型:表达式运算后最终所得到的值的类型。运算结果的类型:表达式运算后最终所得到的值的类型。C运运算算符符算术运算符:(算术运算符:(+ - * / % + -+ - * / % + -)关系运算符:(关系运算符:( = != = !=)逻辑运算符:(!逻辑运算符:(! & |& |)位运算符位运算符 :(:( | & | &)赋值运算符:(赋值

114、运算符:(= = 及其扩展)及其扩展)条件运算符:(条件运算符:(?:?:)逗号运算符:(逗号运算符:(, ,)指针运算符:(指针运算符:(* * & &)求字节数求字节数 :(:(sizeofsizeof)强制类型转换:(类型)强制类型转换:(类型)分量运算符:(分量运算符:(. -. -)下标运算符:(下标运算符:()其它其它 :(:(( ) -( ) -)1. 1. 赋值运算符、赋值表达式赋值运算符、赋值表达式 赋值运算符赋值运算符赋值运算符赋值运算符(“”,双目运算符),双目运算符),双目运算符),双目运算符) l l 一般形式:一般形式:一般形式:一般形式:变量变量变量变量 = =

115、= = 常量或变量或表达式常量或变量或表达式常量或变量或表达式常量或变量或表达式l l 功能:功能:功能:功能:将右边常量或变量或表达式的值赋给左边变量将右边常量或变量或表达式的值赋给左边变量将右边常量或变量或表达式的值赋给左边变量将右边常量或变量或表达式的值赋给左边变量 例如:例如:例如:例如: intint x, y, z; x, y, z; x = 20; x = 20; y = x; y = x; z = x + y; z = x + y;赋值表达式赋值表达式赋值表达式赋值表达式 l l 定义:定义:定义:定义: 由赋值运算符或复合赋值运算符(后面即将介绍),将一个变量和一由赋值运算符

116、或复合赋值运算符(后面即将介绍),将一个变量和一由赋值运算符或复合赋值运算符(后面即将介绍),将一个变量和一由赋值运算符或复合赋值运算符(后面即将介绍),将一个变量和一个表达式连接起来的表达式,称为个表达式连接起来的表达式,称为个表达式连接起来的表达式,称为个表达式连接起来的表达式,称为赋值表达式赋值表达式赋值表达式赋值表达式。l l 一般格式:一般格式:一般格式:一般格式:变量变量变量变量 (复合)赋值运算符(复合)赋值运算符(复合)赋值运算符(复合)赋值运算符 表达式表达式表达式表达式l l 赋值表达式的值:赋值表达式的值:赋值表达式的值:赋值表达式的值:被赋值变量的值。被赋值变量的值。被

117、赋值变量的值。被赋值变量的值。例如:例如:例如:例如:“a = 5”a = 5”a = 5”a = 5”这个赋值表达式,变量这个赋值表达式,变量这个赋值表达式,变量这个赋值表达式,变量a a a a的值的值的值的值“”就是它的值。就是它的值。就是它的值。就是它的值。 赋值语句赋值语句赋值语句赋值语句 例如:例如:例如:例如: x = 8; a = b = c = 5x = 8; a = b = c = 5; l l 定义:定义:定义:定义:赋值表达式在其后面加分号就构成了赋值表达式在其后面加分号就构成了赋值表达式在其后面加分号就构成了赋值表达式在其后面加分号就构成了赋值语句赋值语句赋值语句赋值

118、语句。 赋值运算符及赋值表达式的使用赋值运算符及赋值表达式的使用赋值运算符及赋值表达式的使用赋值运算符及赋值表达式的使用 l l 多个变量连续赋值多个变量连续赋值多个变量连续赋值多个变量连续赋值例如:例如:例如:例如: a = b = c = 10a = b = c = 10; a = (b = (c = 10)a = (b = (c = 10); 结果:结果:结果:结果:a a、b b、c c的值都为的值都为的值都为的值都为1010l l 赋值表达式的嵌套赋值表达式的嵌套赋值表达式的嵌套赋值表达式的嵌套例如:例如:例如:例如: a = (b = 2) + (c = 3)a = (b = 2)

119、 + (c = 3) ( a = (b = 2) + (c = 3)( a = (b = 2) + (c = 3) 结果:结果:结果:结果:b b为为为为2 2,c c为为为为3 3,a a为为为为b+cb+c即即即即5 5注意:注意:注意:注意: 赋值语句赋值语句赋值语句赋值语句“=”=”=”=”左边必须是变量名或对应某特定内存左边必须是变量名或对应某特定内存左边必须是变量名或对应某特定内存左边必须是变量名或对应某特定内存单元的表达式单元的表达式单元的表达式单元的表达式(后面的章节会遇到这样的表达式),不(后面的章节会遇到这样的表达式),不(后面的章节会遇到这样的表达式),不(后面的章节会遇

120、到这样的表达式),不能是常量或其它表达式。能是常量或其它表达式。能是常量或其它表达式。能是常量或其它表达式。 例如:例如:例如:例如:30 = a; b + 2 = 5; 30 = a; b + 2 = 5; 30 = a; b + 2 = 5; 30 = a; b + 2 = 5; 都是错误的。都是错误的。都是错误的。都是错误的。 赋值语句中的赋值语句中的赋值语句中的赋值语句中的“=”=”=”=”表示赋值,不是代数中相等的意表示赋值,不是代数中相等的意表示赋值,不是代数中相等的意表示赋值,不是代数中相等的意思。思。思。思。要表示相等的意思则应用关系运算符要表示相等的意思则应用关系运算符要表示

121、相等的意思则应用关系运算符要表示相等的意思则应用关系运算符“=”=”=”=”表示,表示,表示,表示,二者切勿混淆!二者切勿混淆!二者切勿混淆!二者切勿混淆!2. 2. 强制类型转换符强制类型转换符 C C C C语言的数据类型是可以相互转换的。转换的方法有两语言的数据类型是可以相互转换的。转换的方法有两语言的数据类型是可以相互转换的。转换的方法有两语言的数据类型是可以相互转换的。转换的方法有两种:一种是种:一种是种:一种是种:一种是自动转换自动转换自动转换自动转换,一种是,一种是,一种是,一种是强制转换强制转换强制转换强制转换。自动转换自动转换自动转换自动转换 例如:例如:例如:例如:inti

122、ntintint a = 2.5; a = 2.5; a = 2.5; a = 2.5; 则则则则a a a a的值将是的值将是的值将是的值将是2,2,2,2,而而而而不是不是不是不是2.52.52.52.5。 这种自动改变等号右边表达式值的数据类型的操作称这种自动改变等号右边表达式值的数据类型的操作称这种自动改变等号右边表达式值的数据类型的操作称这种自动改变等号右边表达式值的数据类型的操作称为数据类型的为数据类型的为数据类型的为数据类型的自动转换。自动转换。自动转换。自动转换。 首先将等号右边的表达式的值转换首先将等号右边的表达式的值转换首先将等号右边的表达式的值转换首先将等号右边的表达式的

123、值转换成成成成“=”=”=”=”左边的数据类型。然后再赋值给左边的数据类型。然后再赋值给左边的数据类型。然后再赋值给左边的数据类型。然后再赋值给等号左边的变量等号左边的变量等号左边的变量等号左边的变量。 (1) (1) (1) (1) 短长度的数据类型短长度的数据类型短长度的数据类型短长度的数据类型 长长度的数据类型长长度的数据类型长长度的数据类型长长度的数据类型 方法:方法:方法:方法:直接将无符号短长度的数据类型的数据作为长长度的数据直接将无符号短长度的数据类型的数据作为长长度的数据直接将无符号短长度的数据类型的数据作为长长度的数据直接将无符号短长度的数据类型的数据作为长长度的数据类型数据

124、的低位部分,长长度的数据类型数据的高位部分补零。类型数据的低位部分,长长度的数据类型数据的高位部分补零。类型数据的低位部分,长长度的数据类型数据的高位部分补零。类型数据的低位部分,长长度的数据类型数据的高位部分补零。 l l无符号短长度的数据类型无符号短长度的数据类型无符号短长度的数据类型无符号短长度的数据类型 无符号或有符号长长度的数据类型无符号或有符号长长度的数据类型无符号或有符号长长度的数据类型无符号或有符号长长度的数据类型无符号短长度的数据类型无符号短长度的数据类型无符号短长度的数据类型无符号短长度的数据类型长长度的数据类型长长度的数据类型长长度的数据类型长长度的数据类型0 00 0.

125、 . . . . .0 0. . . . . . .高位部分补高位部分补高位部分补高位部分补0 0 0 0例如:例如:例如:例如: unsigned char unsigned char chch = 0xfc; = 0xfc; unsigned unsigned intint a = 0xff00; a = 0xff00; /假设假设intint数据为数据为1616位位 intint b; b; unsigned long u; unsigned long u; b = b = chch; ; /b/b的值将是的值将是0x00fc0x00fc u = a; u = a; /u/u的值将是的值

126、将是0x0000ff000x0000ff00如果将如果将如果将如果将chchchch的值赋给的值赋给的值赋给的值赋给-4,-4,-4,-4,问问问问b b b b的值又是多少呢?的值又是多少呢?的值又是多少呢?的值又是多少呢? 0x00fc 0x00fc 2. 2. 强制类型转换符强制类型转换符 自动转换自动转换自动转换自动转换 (1) (1) (1) (1) 短长度的数据类型短长度的数据类型短长度的数据类型短长度的数据类型 长长度的数据类型长长度的数据类型长长度的数据类型长长度的数据类型 方法:方法:方法:方法:直接将有符号短长度的数据类型的数据作为长长度的数据直接将有符号短长度的数据类型的

127、数据作为长长度的数据直接将有符号短长度的数据类型的数据作为长长度的数据直接将有符号短长度的数据类型的数据作为长长度的数据类型数据的低位部分,然后将低位部分的最高位(即有符号短长度数据类型数据的低位部分,然后将低位部分的最高位(即有符号短长度数据类型数据的低位部分,然后将低位部分的最高位(即有符号短长度数据类型数据的低位部分,然后将低位部分的最高位(即有符号短长度数据的符号位)向长长度的数据类型数据的高位部分扩展。的符号位)向长长度的数据类型数据的高位部分扩展。的符号位)向长长度的数据类型数据的高位部分扩展。的符号位)向长长度的数据类型数据的高位部分扩展。 l l有符号短长度的数据类型有符号短长

128、度的数据类型有符号短长度的数据类型有符号短长度的数据类型 无符号或有符号长长度的数据类型无符号或有符号长长度的数据类型无符号或有符号长长度的数据类型无符号或有符号长长度的数据类型有符号短长度的数据类型有符号短长度的数据类型有符号短长度的数据类型有符号短长度的数据类型长长度的数据类型长长度的数据类型长长度的数据类型长长度的数据类型z z符号位向高位符号位向高位符号位向高位符号位向高位部分扩展部分扩展部分扩展部分扩展z zz z符号位符号位符号位符号位例如:例如:例如:例如: char char chch = 2; = 2; intint a = -2; a = -2; intint b; b;

129、unsigned long u; unsigned long u; b = b = chch; ; /b/b的值将是的值将是2 2 u = a;u = a; /u/u的值将是的值将是0xfffffffe0xfffffffe2. 2. 强制类型转换符强制类型转换符 自动转换自动转换自动转换自动转换 (2) (2) (2) (2) 长长度的数据类型长长度的数据类型长长度的数据类型长长度的数据类型 短长度的数据类型短长度的数据类型短长度的数据类型短长度的数据类型 方法:方法:方法:方法:直接截取长长度的数据类型数据的低位部分(长度为短长直接截取长长度的数据类型数据的低位部分(长度为短长直接截取长长度

130、的数据类型数据的低位部分(长度为短长直接截取长长度的数据类型数据的低位部分(长度为短长度的数据类型的长度)作为短长度数据类型的数据。度的数据类型的长度)作为短长度数据类型的数据。度的数据类型的长度)作为短长度数据类型的数据。度的数据类型的长度)作为短长度数据类型的数据。 短长度的数据类型短长度的数据类型短长度的数据类型短长度的数据类型长长度的数据类型长长度的数据类型长长度的数据类型长长度的数据类型例如:例如:例如:例如: intint a = -32768; a = -32768; /假设假设intint数据为数据为1616位位 unsigned long b = 0xffffaa00;uns

131、igned long b = 0xffffaa00; char char chch; ; intint c; c; chch = a; = a; /chch的值将是的值将是0 0 c = b; c = b; /c/c的值将是的值将是0xaa000xaa00(3) (3) (3) (3) 长度相同的数据类型转换长度相同的数据类型转换长度相同的数据类型转换长度相同的数据类型转换 方法:方法:方法:方法:数据按照原样复制即可。数据按照原样复制即可。数据按照原样复制即可。数据按照原样复制即可。 例如:例如:例如:例如: intint a = 0xff00; a = 0xff00; unsigned u

132、nsigned intint b = a; b = a; /b/b的值将是的值将是0xff000xff002. 2. 强制类型转换符强制类型转换符 强制转换强制转换强制转换强制转换 强制类型转换是通过类型转换运算来实现的。其一般强制类型转换是通过类型转换运算来实现的。其一般强制类型转换是通过类型转换运算来实现的。其一般强制类型转换是通过类型转换运算来实现的。其一般形式为:形式为:形式为:形式为: ( ( ( (类型说明符类型说明符类型说明符类型说明符) () () () (表达式表达式表达式表达式) ) ) ) 功能:功能:功能:功能:把表达式的运算结果强制转换成类型说明符所把表达式的运算结果

133、强制转换成类型说明符所把表达式的运算结果强制转换成类型说明符所把表达式的运算结果强制转换成类型说明符所表示的类型。其中,表示的类型。其中,表示的类型。其中,表示的类型。其中,( ( ( (类型说明符类型说明符类型说明符类型说明符) ) ) )是强制类型转换符,它是强制类型转换符,它是强制类型转换符,它是强制类型转换符,它的优先级比较高。的优先级比较高。的优先级比较高。的优先级比较高。 例:例:例:例: float x = 3.5, y = 2.1, z; float x = 3.5, y = 2.1, z; intint a; a; a = ( a = (int)(x+yint)(x+y);

134、); /结果为结果为5 5 z = ( z = (int)x+yint)x+y; ; /结果为结果为5.1000005.100000 z = (double)(3/2); z = (double)(3/2); /结果为结果为1.0000001.000000 a = (int)3.6; a = (int)3.6; /结果为结果为3 3精度损失问题精度损失问题精度损失问题精度损失问题较高类型向较低较高类型向较低较高类型向较低较高类型向较低类型转换时可能类型转换时可能类型转换时可能类型转换时可能发生发生发生发生注意:在使用强制转换时应注意以下问题:注意:在使用强制转换时应注意以下问题:注意:在使用强

135、制转换时应注意以下问题:注意:在使用强制转换时应注意以下问题:类型说明符和表达式都必须加括号类型说明符和表达式都必须加括号类型说明符和表达式都必须加括号类型说明符和表达式都必须加括号( ( ( (单个变量可以不加括号单个变量可以不加括号单个变量可以不加括号单个变量可以不加括号) ) ) )。 例如:把例如:把例如:把例如:把( ( ( (int)(x+yint)(x+yint)(x+yint)(x+y) ) ) )写成写成写成写成( ( ( (int)x+yint)x+yint)x+yint)x+y则成了把则成了把则成了把则成了把x x x x转换成转换成转换成转换成intintintint型

136、之后再型之后再型之后再型之后再与与与与y y y y相加了。相加了。相加了。相加了。无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量无论是强制转换或是自动转换,都只是为了本次运算的需要而对变量的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类的数据长度进行的临时性转换,而不改变数据说明时对该变量定义的类型。型。型。型。 例如,例如

137、,例如,例如,( ( ( (double)adouble)adouble)adouble)a 只是将变量只是将变量只是将变量只是将变量a a a a的值转换成一个的值转换成一个的值转换成一个的值转换成一个doubledoubledoubledouble型的中间量,型的中间量,型的中间量,型的中间量,其数据类型并未转换成其数据类型并未转换成其数据类型并未转换成其数据类型并未转换成doubledoubledoubledouble型。型。型。型。 基本算术运算符:基本算术运算符:基本算术运算符:基本算术运算符: + + + + - - - - * / % * / % * / % * / %l l 结

138、合方向:从左向右结合方向:从左向右结合方向:从左向右结合方向:从左向右l l 优先级:优先级:优先级:优先级: - - - - - - - -* / %* / %* / %* / % - - - - + -+ -+ -+ - (2) (3) (4)(2) (3) (4)(2) (3) (4)(2) (3) (4)说明:说明:说明:说明:l l “-”“-”“-”“-”可为可为可为可为单目单目单目单目运算符时运算符时运算符时运算符时, , , ,右结合性右结合性右结合性右结合性l l 两整数相除,结果为整数两整数相除,结果为整数两整数相除,结果为整数两整数相除,结果为整数l l % % % %要

139、求两侧均为整型数据要求两侧均为整型数据要求两侧均为整型数据要求两侧均为整型数据例:例:例:例: 5 / 2 =5 / 2 = -5 / 2.0 = -5 / 2.0 =例:例:例:例: 5 % 2 =5 % 2 = -5 % 2 = -5 % 2 = 1 % 10 = 1 % 10 = 5 % 1 =5 % 1 = 5.5 % 2 5.5 % 2 3. 3. 算术运算符、算术表达式算术运算符、算术表达式 2 2-2.5-2.51 1-1-11 10 0( ( ) ) 表达式和算术表达式表达式和算术表达式表达式和算术表达式表达式和算术表达式3. 3. 算术运算符、算术表达式算术运算符、算术表达式

140、 表达式:表达式:表达式:表达式:用运算符和括号将运算对象(常量、变量和函数用运算符和括号将运算对象(常量、变量和函数用运算符和括号将运算对象(常量、变量和函数用运算符和括号将运算对象(常量、变量和函数等)连接起来的、符合语言语法规则的式子。等)连接起来的、符合语言语法规则的式子。等)连接起来的、符合语言语法规则的式子。等)连接起来的、符合语言语法规则的式子。 算术表达式:算术表达式:算术表达式:算术表达式:表达式中的运算符都是算术运算符的表达式。表达式中的运算符都是算术运算符的表达式。表达式中的运算符都是算术运算符的表达式。表达式中的运算符都是算术运算符的表达式。 运算符优先级(到目前为止)

141、运算符优先级(到目前为止)运算符优先级(到目前为止)运算符优先级(到目前为止)例:例:例:例: 3 + 5 * 83 + 5 * 8、(x + y) / 2 - 1(x + y) / 2 - 1等等等等 自增、自减运算符自增、自减运算符自增、自减运算符自增、自减运算符+ -+ -+ -+ -l l 作用:使变量值加作用:使变量值加作用:使变量值加作用:使变量值加1 1 1 1或减或减或减或减1 1 1 1l l 种类:种类:种类:种类: 前置前置前置前置 +i, -i (+i, -i (+i, -i (+i, -i (先执行先执行先执行先执行i=ii=ii=ii=i+1+1+1+1或或或或i=

142、i-1i=i-1i=i-1i=i-1,再使用再使用再使用再使用i i i i值)值)值)值) 后置后置后置后置 i+,i- (i+,i- (i+,i- (i+,i- (先使用先使用先使用先使用i i i i值值值值, , , ,再执行再执行再执行再执行i=ii=ii=ii=i+1+1+1+1或或或或i=i-1i=i-1i=i-1i=i-1)例:例:例:例: j = 3; k = +j; j = 3; k = +j; j = 3; k = j+; j = 3; k = j+; j = 3; j = 3; printfprintf (“%d”, +j); (“%d”, +j); j = 3; j

143、= 3; printf(“%dprintf(“%d”, j+); ”, j+); a = 3; b = 5; c = (+a) * b; a = 3; b = 5; c = (+a) * b; a = 3; b = 5; c = (a+) * b; a = 3; b = 5; c = (a+) * b; /k=4,j=4/k=4,j=4/k=3,j=4/k=3,j=4/4/4/3/3/c=20,a=4/c=20,a=4/c=15,a=4/c=15,a=44. 4. 自增自减自增自减运算符、符号运算符运算符、符号运算符 负号运算符(负号运算符(负号运算符(负号运算符(“-”-”-”-”) 减号(

144、)既是一个算术运算符,又是一个负号运算符。负号减号()既是一个算术运算符,又是一个负号运算符。负号减号()既是一个算术运算符,又是一个负号运算符。负号减号()既是一个算术运算符,又是一个负号运算符。负号运算符是单目运算符。运算符是单目运算符。运算符是单目运算符。运算符是单目运算符。例如:例如:例如:例如:a = 2a = 2a = 2a = 2,那么,那么,那么,那么a a a a的值就是的值就是的值就是的值就是2 2 2 2。负号运。负号运。负号运。负号运算符的优先级比较高,与强制类型转换符是同一个级别。算符的优先级比较高,与强制类型转换符是同一个级别。算符的优先级比较高,与强制类型转换符是

145、同一个级别。算符的优先级比较高,与强制类型转换符是同一个级别。 自增、自减运算符注意事项自增、自减运算符注意事项自增、自减运算符注意事项自增、自减运算符注意事项+和和和和-运算符只能用于变量,不能用于常量和表达运算符只能用于变量,不能用于常量和表达运算符只能用于变量,不能用于常量和表达运算符只能用于变量,不能用于常量和表达式。式。式。式。 因为因为因为因为+和和和和-蕴含着赋值操作。蕴含着赋值操作。蕴含着赋值操作。蕴含着赋值操作。 例例例例如:如:如:如:5+5+5+5+、-(a+ba+ba+ba+b)都是非法的表达式。)都是非法的表达式。)都是非法的表达式。)都是非法的表达式。负号运算符、负

146、号运算符、负号运算符、负号运算符、+、-和强制类型转换运算符的优先和强制类型转换运算符的优先和强制类型转换运算符的优先和强制类型转换运算符的优先级相同,当这些运算符连用时,按照从右向左的顺级相同,当这些运算符连用时,按照从右向左的顺级相同,当这些运算符连用时,按照从右向左的顺级相同,当这些运算符连用时,按照从右向左的顺序计算,即具有右结合性。序计算,即具有右结合性。序计算,即具有右结合性。序计算,即具有右结合性。两个和之间不能有空格。两个和之间不能有空格。两个和之间不能有空格。两个和之间不能有空格。在表达式中,连续使同一变量进行自增或自减运算在表达式中,连续使同一变量进行自增或自减运算在表达式

147、中,连续使同一变量进行自增或自减运算在表达式中,连续使同一变量进行自增或自减运算时,很容易出错,所以最好避免这种用法。时,很容易出错,所以最好避免这种用法。时,很容易出错,所以最好避免这种用法。时,很容易出错,所以最好避免这种用法。 例如:例如:例如:例如:+i+i+i+i+是非法的。是非法的。是非法的。是非法的。自增、自减运算,常用于循环语句中,使循环控制自增、自减运算,常用于循环语句中,使循环控制自增、自减运算,常用于循环语句中,使循环控制自增、自减运算,常用于循环语句中,使循环控制变变量加(或减)变变量加(或减)变变量加(或减)变变量加(或减)- - - -,以及指针变量中,使指针,以及

148、指针变量中,使指针,以及指针变量中,使指针,以及指针变量中,使指针指向下(或上)一个地址。指向下(或上)一个地址。指向下(或上)一个地址。指向下(或上)一个地址。4. 4. 自增自减自增自减运算符、符号运算符运算符、符号运算符例:例:例:例: intint p, i = 2, j = 3; p, i = 2, j = 3; p = -i+; p = -i+; p = ? i = ?p = ? i = ? p = p = i+ji+j; ; p = ? i = ? j = ?p = ? i = ? j = ? p = p = i+-ji+-j; ; p = ? i = ? j = ?p = ?

149、i = ? j = ? p = p = i+-ji+-j; ; p = ? i = ? j = ?p = ? i = ? j = ? p = p = i+ii+i+; +; p = ? i = ? p = ? i = ? p = + p = +i+(+ii+(+i); ); p = ? i = ? p = ? i = ? -2-23 35 53 33 34 42 22 24 43 32 24 44 44 48 85. 5. 算术运算符中数据类型转换规则算术运算符中数据类型转换规则 低低低低高高高高doubledoublefloatfloatlonglongunsignedunsignedint

150、intchar, shortchar, shortlong dlong doubleouble说明说明说明说明: : : :必定的转换必定的转换必定的转换必定的转换运算对象类型不同时转换运算对象类型不同时转换运算对象类型不同时转换运算对象类型不同时转换例:例:例:例: char char chch; ; intint i; i; float f; float f; double d; double d;ch/ich/i + f*d - (f+i) + f*d - (f+i)intintintintdoubledoubledoubledoubledoubledoubledoubledoubled

151、oubledoubledoubledouble10+a +i*f - d/l10+a +i*f - d/l例:例:例:例: intint i; i; float f; float f; double d; double d; long l; long l;intintintintdoubledoubledoubledoubledoubledoubledoubledoubledoubledoubledoubledouble#include #include void main ( )void main ( ) float a, b, c; float a, b, c; a = 7 / 2; a

152、= 7 / 2; /计算计算计算计算7/27/27/27/2得得得得intintintint型值型值型值型值3 3 3 3,因此,因此,因此,因此a a a a的值为的值为的值为的值为3.03.03.03.0 b = 7 / 2 * 1.0; b = 7 / 2 * 1.0; /计算计算计算计算7/27/27/27/2得得得得intintintint型值型值型值型值3 3 3 3,再与,再与,再与,再与1.01.01.01.0相乘,因此相乘,因此相乘,因此相乘,因此b b b b的值为的值为的值为的值为3.03.03.03.0 c = 1.0 * 7 / 2; c = 1.0 * 7 / 2;

153、 /先计算先计算先计算先计算1.0*71.0*71.0*71.0*7得得得得doubledoubledoubledouble型的结果型的结果型的结果型的结果7.07.07.07.0,然后再计算,然后再计算,然后再计算,然后再计算 7.0/27.0/27.0/27.0/2,因此,因此,因此,因此c c c c的值是的值是的值是的值是3.53.53.53.5 printfprintf (a = %f, b = %f, c = %f, a, b, c); (a = %f, b = %f, c = %f, a, b, c); a = 3.000000a = 3.000000,b = 3.000000b

154、 = 3.000000,c = 3.500000c = 3.5000006. 6. 位运算符、位运算表达式位运算符、位运算表达式 位运算符:位运算符:位运算符:位运算符:按位与(按位与(按位与(按位与(& & & &)、按位或()、按位或()、按位或()、按位或(| | | |)、按位取反)、按位取反)、按位取反)、按位取反( )、按位异或()、按位异或()、按位异或()、按位异或( )、左移()、左移()、左移()、左移()六种。)六种。)六种。)六种。 左移(左移(左移(左移() 实现将某变量所对应的二进制数往左移位,溢出的最实现将某变量所对应的二进制数往左移位,溢出的最实现将某变量所对应

155、的二进制数往左移位,溢出的最实现将某变量所对应的二进制数往左移位,溢出的最高位被丢掉,空出的低位用零填补。其一般格式为:高位被丢掉,空出的低位用零填补。其一般格式为:高位被丢掉,空出的低位用零填补。其一般格式为:高位被丢掉,空出的低位用零填补。其一般格式为: 返回整型值的表达式返回整型值的表达式返回整型值的表达式返回整型值的表达式 返回整型值的表达式返回整型值的表达式返回整型值的表达式返回整型值的表达式例:例:例:例: intint a = 3; a = 3; a 2a 2:将将将将a a a a所对应的二进制数左移两位,该表达式的所对应的二进制数左移两位,该表达式的所对应的二进制数左移两位,

156、该表达式的所对应的二进制数左移两位,该表达式的值为值为值为值为12121212。 2 a2 ) 右移运算实现将某变量所对应的二进制数往右移位,右移运算实现将某变量所对应的二进制数往右移位,右移运算实现将某变量所对应的二进制数往右移位,右移运算实现将某变量所对应的二进制数往右移位,溢出的最低位被丢掉,如果变量是无符号数,空出的高位溢出的最低位被丢掉,如果变量是无符号数,空出的高位溢出的最低位被丢掉,如果变量是无符号数,空出的高位溢出的最低位被丢掉,如果变量是无符号数,空出的高位用零填补,如果变量是有符号数,空出的高位用原来的符用零填补,如果变量是有符号数,空出的高位用原来的符用零填补,如果变量是

157、有符号数,空出的高位用原来的符用零填补,如果变量是有符号数,空出的高位用原来的符号位填补(即负数填号位填补(即负数填号位填补(即负数填号位填补(即负数填1 1 1 1,正数填,正数填,正数填,正数填0 0 0 0)。其一般格式为:)。其一般格式为:)。其一般格式为:)。其一般格式为: 返回整型值的表达式返回整型值的表达式返回整型值的表达式返回整型值的表达式 返回整型值的表达式返回整型值的表达式返回整型值的表达式返回整型值的表达式例:例:例:例:intint a = 8; a = 8; a 2 a 2:将将将将a a a a所对应的二进制数右移两位,该表达式的值为所对应的二进制数右移两位,该表达

158、式的值为所对应的二进制数右移两位,该表达式的值为所对应的二进制数右移两位,该表达式的值为2 2 2 2。 例:例:例:例: 将将将将shortshortshortshort类型数据的高、低位字节互换类型数据的高、低位字节互换类型数据的高、低位字节互换类型数据的高、低位字节互换 #include #include void main ( )void main ( ) short a = 0xf245 , b, c; short a = 0xf245 , b, c; b = a 8 ; b = a 8 ; c = a 8 ; /将将将将a a a a的高的高的高的高8 8 8 8位移到低位移到低位

159、移到低位移到低8 8 8 8位赋值给位赋值给位赋值给位赋值给c c c c,c c c c的值为的值为的值为的值为0xfff20xfff20xfff20xfff2 c = c & 0x00ff; c = c & 0x00ff; /将将将将c c c c的高的高的高的高8 8 8 8位清位清位清位清0 0 0 0后赋值给后赋值给后赋值给后赋值给c c c c,c c c c的值为的值为的值为的值为0x00f20x00f20x00f20x00f2 a = b + c; a = b + c; /将将将将b b b b和和和和c c c c的值相加赋值给的值相加赋值给的值相加赋值给的值相加赋值给a a

160、 a a,a a a a的值为的值为的值为的值为0x45f20x45f20x45f20x45f2 printfprintf (a = %x, a); (a = %x, a); a = 0x45f2a = 0x45f2 位运算之间的优先级位运算之间的优先级位运算之间的优先级位运算之间的优先级 & | & |7. 7. 逗号运算符、逗号表达式逗号运算符、逗号表达式 位运算符:位运算符:位运算符:位运算符:, , , , 逗号表达式:逗号表达式:逗号表达式:逗号表达式:用逗号连接起来的表达式。其一般形式为:用逗号连接起来的表达式。其一般形式为:用逗号连接起来的表达式。其一般形式为:用逗号连接起来的表

161、达式。其一般形式为: 表达式表达式表达式表达式1 1 1 1,表达式,表达式,表达式,表达式2 2 2 2,表达式,表达式,表达式,表达式k k k k 优先级:优先级:优先级:优先级:优先级最低。优先级最低。优先级最低。优先级最低。 结合性:结合性:结合性:结合性:左结合性左结合性左结合性左结合性 。即逗号表达式的求值顺序是即逗号表达式的求值顺序是即逗号表达式的求值顺序是即逗号表达式的求值顺序是从左向从左向从左向从左向右右右右依此计算用逗号分隔的各表达式的值。依此计算用逗号分隔的各表达式的值。依此计算用逗号分隔的各表达式的值。依此计算用逗号分隔的各表达式的值。 逗号表达式逗号表达式逗号表达式

162、逗号表达式的值:的值:的值:的值:最后一个表达式的值就是整个逗号表达最后一个表达式的值就是整个逗号表达最后一个表达式的值就是整个逗号表达最后一个表达式的值就是整个逗号表达式的值。式的值。式的值。式的值。 用途:用途:用途:用途:常用于循环常用于循环常用于循环常用于循环forforforfor语句中语句中语句中语句中。例如:例如:例如:例如:a+3, b=4, b+a+3, b=4, b+ 例例例例: : a = 3 * 5, a * 4 a = 3 * 5, a * 4 a = 3 * 5, a * 4, a + 5 a = 3 * 5, a * 4, a + 5例例例例: : : : x =

163、 (a = 3, 6 * 3)x = (a = 3, 6 * 3) x = a = 3, 6 * a x = a = 3, 6 * a例:例:例:例:a = 1; b = 2; c = 3;a = 1; b = 2; c = 3; printfprintf (“% (“%d,%d,%dd,%d,%d”, a, b, c); ”, a, b, c); printfprintf (“% (“%d,%d,%dd,%d,%d”, (a, b, c), b, c); ”, (a, b, c), b, c); /a=15,/a=15,表达式值表达式值6060/a=15,/a=15,表达式值表达式值2020

164、/赋值表达式,表达式值赋值表达式,表达式值1818,x=18x=18/逗号表达式逗号表达式, ,表达式值表达式值18,18,x=3x=3/1,2,3/1,2,3/3,2,3/3,2,3例例例例: : : :#include #include vovoid main ( )id main ( ) intint x, y = 7; x, y = 7; float z = 4; float z = 4; x = (y = y + 6, y / z); x = (y = y + 6, y / z); printfprintf (x = % (x = %dndn, x);, x); 运行结果:运行结果:

165、运行结果:运行结果:x = 3x = 38. 8. s sizeof运算符、复合运算符运算符、复合运算符 sizeofsizeofsizeofsizeof运算符运算符运算符运算符 功能:功能:功能:功能:获取变量和数据类型所占内存大小(字节数)获取变量和数据类型所占内存大小(字节数)获取变量和数据类型所占内存大小(字节数)获取变量和数据类型所占内存大小(字节数) 格式:格式:格式:格式:sizeofsizeofsizeofsizeof 表达式表达式表达式表达式sizeofsizeofsizeofsizeof(数据类型名或表达式)(数据类型名或表达式)(数据类型名或表达式)(数据类型名或表达式)

166、例:例:例:例: sizeofsizeof ( (intint) ) 其值为其值为其值为其值为2 2 2 2(在(在(在(在TC2.0TC2.0TC2.0TC2.0或或或或BC3.1BC3.1BC3.1BC3.1下)下)下)下) 其值为其值为其值为其值为4 4 4 4(在在在在VC6.0VC6.0VC6.0VC6.0下)下)下)下) sizeofsizeof (long) (long) 其值是其值是其值是其值是4 4 4 4 sizeof 10L 其值也是其值也是4 4 unsigned long a = 2; sizeof (a) 其值也是其值也是4 4 复合赋值运算符复合赋值运算符复合赋值

167、运算符复合赋值运算符 种类:种类:种类:种类: += -= *= /= %=+= -= *= /= %= = &= = |= = &= = |=含义:含义:含义:含义: exp1 op= exp2exp1 op= exp2 exp1 = exp1 = exp1exp1 op exp2 op exp2 定义:定义:定义:定义:将算术运算符、位运算符与赋值运算符组合在将算术运算符、位运算符与赋值运算符组合在将算术运算符、位运算符与赋值运算符组合在将算术运算符、位运算符与赋值运算符组合在一起就构成了一起就构成了一起就构成了一起就构成了复合赋值运算符复合赋值运算符复合赋值运算符复合赋值运算符。复合赋值

168、运算符即包含了。复合赋值运算符即包含了。复合赋值运算符即包含了。复合赋值运算符即包含了算术运算或位运算,又包含了赋值操作。算术运算或位运算,又包含了赋值操作。算术运算或位运算,又包含了赋值操作。算术运算或位运算,又包含了赋值操作。a += 3a += 3a = a + 3a = a + 3x *= y + 8x *= y + 8x = x * (y + 8)x = x * (y + 8)x %= 3x %= 3x = x % 3x = x % 3x &= y = 3x &= y = 3y = y = 3 3 和和和和 x &= yx &= y例例例例: : : : a=12; a=12; a+

169、=a-=a*a; a+=a-=a*a;/a=-264 /a=-264 等价于等价于等价于等价于a=a+(a=a-(a*a)a=a+(a=a-(a*a)例例例例: : : : intint a=2; a=2; a%=4-1; a%=4-1; a+=a*=a-=a*=3; a+=a*=a-=a*=3; /a=0 /a=0 等价于等价于等价于等价于a=a+(a=a*(a=a-(a=a*3)a=a+(a=a*(a=a-(a=a*3)2.5 运算符的优先级和结合性运算符的优先级和结合性优优优优 先先先先 级级级级运运运运 算算算算 符符符符需要操作数的个数需要操作数的个数需要操作数的个数需要操作数的个数

170、结结结结 合合合合 性性性性高高高高低低低低( )( )从左向右从左向右从左向右从左向右 + - -+ - -(负号运算符)(负号运算符)(负号运算符)(负号运算符) sizeofsizeof ( (类型类型类型类型) )1 1 1 1 (单目运算符)(单目运算符)(单目运算符)(单目运算符)从右向左从右向左从右向左从右向左* * / %/ %2 2 2 2 (双目运算符)(双目运算符)(双目运算符)(双目运算符)从左向右从左向右从左向右从左向右+ - + - (减法)(减法)(减法)(减法)2 2 2 2 (双目运算符)(双目运算符)(双目运算符)(双目运算符)从左向右从左向右从左向右从左向

171、右2 2 2 2 (双目运算符)(双目运算符)(双目运算符)(双目运算符)从左向右从左向右从左向右从左向右&2 2 2 2 (双目运算符)(双目运算符)(双目运算符)(双目运算符)从左向右从左向右从左向右从左向右 2 2 2 2 (双目运算符)(双目运算符)(双目运算符)(双目运算符)从左向右从左向右从左向右从左向右| |2 2 2 2 (双目运算符)(双目运算符)(双目运算符)(双目运算符)从左向右从左向右从左向右从左向右= += -= *= /= %= += -= *= /= %= = = &= = |=2 2 2 2 (双目运算符)(双目运算符)(双目运算符)(双目运算符)从右向左从右向

172、左从右向左从右向左, ,从左向右从左向右从左向右从左向右 判断表达式判断表达式判断表达式判断表达式0XF0F0 & 0X1010 + 0X0A0A 5/20XF0F0 & 0X1010 + 0X0A0A 5/2的值的值的值的值 ? 0XF0F0 & 0X1010 + 0X0A0A 5/20XF0F0 & 0X1010 + 0X0A0A 5/220X1A1A0XF0F0 &0X68680XF0F0 &0X6060/ / / /的优先的优先的优先的优先级最高级最高级最高级最高 + + + +的优先级比的优先级比的优先级比的优先级比& & & &、高高高高 的优先的优先的优先的优先级比级比级比级比&

173、 & & &高高高高 C C语言编程习惯语言编程习惯 (1) (1) (1) (1) 一行只放一条语句。一行只放一条语句。一行只放一条语句。一行只放一条语句。 (2) (2) (2) (2) 养成随时给程序加注释的习惯。养成随时给程序加注释的习惯。养成随时给程序加注释的习惯。养成随时给程序加注释的习惯。 (3) (3) (3) (3) 程序的书写要有层次感,该缩进的一定要缩进。程序的书写要有层次感,该缩进的一定要缩进。程序的书写要有层次感,该缩进的一定要缩进。程序的书写要有层次感,该缩进的一定要缩进。 (4) (4) 编写函数时,变量定义部分和函数的执行部分之间增编写函数时,变量定义部分和函数

174、的执行部分之间增编写函数时,变量定义部分和函数的执行部分之间增编写函数时,变量定义部分和函数的执行部分之间增加一空行,或者在程序的执行部分按照完成的功能块增加一空行,或者在程序的执行部分按照完成的功能块增加一空行,或者在程序的执行部分按照完成的功能块增加一空行,或者在程序的执行部分按照完成的功能块增加相应的空行,会增加程序的易读性。加相应的空行,会增加程序的易读性。加相应的空行,会增加程序的易读性。加相应的空行,会增加程序的易读性。 (5) (5) 为变量起有意义的名字,既可以帮助程序员读懂程序,为变量起有意义的名字,既可以帮助程序员读懂程序,为变量起有意义的名字,既可以帮助程序员读懂程序,为

175、变量起有意义的名字,既可以帮助程序员读懂程序,也可以避免变量的重复乱用,导致程序的逻辑错误。也可以避免变量的重复乱用,导致程序的逻辑错误。也可以避免变量的重复乱用,导致程序的逻辑错误。也可以避免变量的重复乱用,导致程序的逻辑错误。 (6) (6) 在运算符和赋值符的两边加上一个空格会增加程序的在运算符和赋值符的两边加上一个空格会增加程序的在运算符和赋值符的两边加上一个空格会增加程序的在运算符和赋值符的两边加上一个空格会增加程序的易读性。易读性。易读性。易读性。void main()void main() intint i,sumi,sum; ;sum=0;sum=0;for (i=1;i=10

176、0;i+)for (i=1;i=100;i+)if (i%2 =0) sum+=i;if (i%2 =0) sum+=i;printf(sumprintf(sum=%=%d,sumd,sum); ); void main ( ) int i, sum; sum = 0; for (i = 1; i = 100; i+) if (i % 2 = = 0) sum += i; printf (sum = %d, sum);没有层次感没有层次感没有层次感没有层次感层次清晰层次清晰层次清晰层次清晰本章小结本章小结习题:习题:习题:习题:P70P70P70P70P73 1P73 1、2 2 本章所介绍的

177、主要内容是整型数据、实型数据和字符型本章所介绍的主要内容是整型数据、实型数据和字符型本章所介绍的主要内容是整型数据、实型数据和字符型本章所介绍的主要内容是整型数据、实型数据和字符型数据的常量表示法和变量定义格式,以及可以作用于这些数数据的常量表示法和变量定义格式,以及可以作用于这些数数据的常量表示法和变量定义格式,以及可以作用于这些数数据的常量表示法和变量定义格式,以及可以作用于这些数据类型的运算符。虽然本章的内容比较烦杂,学起来也许比据类型的运算符。虽然本章的内容比较烦杂,学起来也许比据类型的运算符。虽然本章的内容比较烦杂,学起来也许比据类型的运算符。虽然本章的内容比较烦杂,学起来也许比较枯

178、燥,但本章的内容是学好较枯燥,但本章的内容是学好较枯燥,但本章的内容是学好较枯燥,但本章的内容是学好C C C C语言的基础,是每个语言的基础,是每个语言的基础,是每个语言的基础,是每个C C C C语言程语言程语言程语言程序员必须熟练掌握的。现在我们一起来回忆一下本章有哪些序员必须熟练掌握的。现在我们一起来回忆一下本章有哪些序员必须熟练掌握的。现在我们一起来回忆一下本章有哪些序员必须熟练掌握的。现在我们一起来回忆一下本章有哪些内容值得我们特别留意和必须深刻领会的呢?内容值得我们特别留意和必须深刻领会的呢?内容值得我们特别留意和必须深刻领会的呢?内容值得我们特别留意和必须深刻领会的呢? 变量的

179、含义变量的含义变量的含义变量的含义 数据在内存中的表示形式数据在内存中的表示形式数据在内存中的表示形式数据在内存中的表示形式 不同类型的数据在内存中的表示范围不同类型的数据在内存中的表示范围不同类型的数据在内存中的表示范围不同类型的数据在内存中的表示范围 转义字符转义字符转义字符转义字符 有符号数与无符号数的区别有符号数与无符号数的区别有符号数与无符号数的区别有符号数与无符号数的区别 数据类型的自动转换与强制类型转换数据类型的自动转换与强制类型转换数据类型的自动转换与强制类型转换数据类型的自动转换与强制类型转换 各种运算符、运算符的优先级和结合性各种运算符、运算符的优先级和结合性各种运算符、运算符的优先级和结合性各种运算符、运算符的优先级和结合性

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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