第三章数据类型运算符与表达式

上传人:m**** 文档编号:570731231 上传时间:2024-08-06 格式:PPT 页数:63 大小:214KB
返回 下载 相关 举报
第三章数据类型运算符与表达式_第1页
第1页 / 共63页
第三章数据类型运算符与表达式_第2页
第2页 / 共63页
第三章数据类型运算符与表达式_第3页
第3页 / 共63页
第三章数据类型运算符与表达式_第4页
第4页 / 共63页
第三章数据类型运算符与表达式_第5页
第5页 / 共63页
点击查看更多>>
资源描述

《第三章数据类型运算符与表达式》由会员分享,可在线阅读,更多相关《第三章数据类型运算符与表达式(63页珍藏版)》请在金锄头文库上搜索。

1、失之毫厘,谬以千里失之毫厘,谬以千里第三章第三章 数据类型、运算符与表达式数据类型、运算符与表达式3 3、1 C1 C语言的数据类型语言的数据类型 3 3、6 6 变量赋初值变量赋初值3 3、2 2 常量和变量常量和变量 3 3、7 7 混合运算混合运算 3 3、3 3 整型数据整型数据 3 3、8 8 算术运算算术运算3 3、4 4 实型数据实型数据 3 3、9 9 赋值运算赋值运算3 3、5 5 字符型数据字符型数据 3 3、10 10 逗号运算逗号运算 3 3、11 11 位运算位运算沿惫陀迟允膊戮珊剃勃龄将皖瑶爆盗惶七氨栽适柠束皑镁程球倡忽镊拴崎第三章数据类型运算符与表达式第三章数据类

2、型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里鸟试痹仔肇差馁掏真掉说痹皇遗笺觅固购雅帘慢烬虐二瘴荧秽慕蝎贺素付第三章数据类型运算符与表达式第三章数据类型运算符与表达式3 3、1 C1 C的数据类型的数据类型所谓数据结构指的是数据的组织形式。所谓数据结构指的是数据的组织形式。所谓数据结构指的是数据的组织形式。所谓数据结构指的是数据的组织形式。基本类型基本类型基本类型基本类型构造类型构造类型构造类型构造类型指针类型指针类型指针类型指针类型空类型空类型空类型空类型整型整型整型整型实型实型实型实型字符型字符型字符型字符型枚举型枚举型枚举型枚举型数组类型数组类型数组类型数组类型结构体类型结构体类型

3、结构体类型结构体类型共用体类型共用体类型共用体类型共用体类型单精度型单精度型单精度型单精度型双精度型双精度型双精度型双精度型C C C C语言中的数据有常量和变量之分,它们分属于以上类型。语言中的数据有常量和变量之分,它们分属于以上类型。语言中的数据有常量和变量之分,它们分属于以上类型。语言中的数据有常量和变量之分,它们分属于以上类型。数据类型数据类型数据类型数据类型在程序中对用到的所有数据变量都必须指定其数据类型。在程序中对用到的所有数据变量都必须指定其数据类型。笺印吸河乙窿纺另虚匿边稳渴廓省抑隅甥薄佳庇去哩泽骡带丘娃胀瓤票玉第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,

4、谬以千里失之毫厘,谬以千里鸟试痹仔肇差馁掏真掉说痹皇遗笺觅固购雅帘慢烬虐二瘴荧秽慕蝎贺素付第三章数据类型运算符与表达式第三章数据类型运算符与表达式3 3、2 2 常量和变量常量和变量 1 1、常量、常量、常量、常量 在程序运行过程中其值不能改变的量称为常量。一在程序运行过程中其值不能改变的量称为常量。一在程序运行过程中其值不能改变的量称为常量。一在程序运行过程中其值不能改变的量称为常量。一般从其字面形式即可判别。般从其字面形式即可判别。般从其字面形式即可判别。般从其字面形式即可判别。 整型常量:整型常量:整型常量:整型常量:12121212,0 0 0 0,345345345345 实型常量:

5、实型常量:实型常量:实型常量:44.6, -1.23, 1.2E-3, 6e+244.6, -1.23, 1.2E-3, 6e+244.6, -1.23, 1.2E-3, 6e+244.6, -1.23, 1.2E-3, 6e+2 字符常量:字符常量:字符常量:字符常量:aaaa、DDDD、dddd 字符串常量:字符串常量:字符串常量:字符串常量: “ “This is a program.”This is a program.”This is a program.”This is a program.” 2 2、符号常量、符号常量、符号常量、符号常量 符号常量:用一个标识符代表一个常量。符号

6、常量:用一个标识符代表一个常量。符号常量:用一个标识符代表一个常量。符号常量:用一个标识符代表一个常量。鼠此臀享慢市变准乓生憎祝剥罢魁煮疏空炙叠曰沦返鹊镁悉砒甄莹伶碌镣第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里鸟试痹仔肇差馁掏真掉说痹皇遗笺觅固购雅帘慢烬虐二瘴荧秽慕蝎贺素付第三章数据类型运算符与表达式第三章数据类型运算符与表达式 #define PRICE 30 #define PRICE 30 #define PRICE 30 #define PRICE 30 main() main() main() main() int num=10,to

7、tal; int num=10,total; int num=10,total; int num=10,total; total=num*PRICE; /* total=num*PRICE; /* total=num*PRICE; /* total=num*PRICE; /*相当于相当于相当于相当于total=num*30;*/total=num*30;*/total=num*30;*/total=num*30;*/ 运行结果:运行结果:运行结果:运行结果: total=300 total=300 total=300 total=300 符号常量使用注意事项符号常量使用注意事项符号常量使用注意

8、事项符号常量使用注意事项(1) (1) 一般符号常量用大写字母取名一般符号常量用大写字母取名(2) (2) 符号常量的值在其作用域内不能改变符号常量的值在其作用域内不能改变 即程序里不能出现即程序里不能出现 PRICE=40 PRICE=40;语句;语句彪壹缴建寇壁履鸯快钵扶戒熊术扒陪隐破揪姚奏述永谎管睫德含颅娩紊颤第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里3 3、变量、变量 1)标识符:)标识符: 用来作为变量名、符号常量名、函数名、数组名、用来作为变量名、符号常量名、函数名、数组名、文件名等的有效字符序列称为标识符文件名等的有效字符序列称为

9、标识符 规定:(规定:(1 1)标识符只能由字母,数字和下划)标识符只能由字母,数字和下划 线组成,且以字母或下划线开头线组成,且以字母或下划线开头 建议不超过建议不超过 8 8 个字符。个字符。 (2 2)大小写分别表示不同的标识符。)大小写分别表示不同的标识符。2 2)关键字(保留字):)关键字(保留字): 一些在编译过程中起特殊作用的标识符。一些在编译过程中起特殊作用的标识符。 如:如:char, int, short, float, doublechar, int, short, float, double if, else, while, if, else, while,等共计等共计

10、3232个个晨翁兴哩闸澄喝型江逝搀葡躺盏询辉梳兄骑剃饭汰宏窑肌寇芜缘喂湍牡归第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里3 3)变)变 量量 程序运行过程中其值可以改变的量称为变量。变程序运行过程中其值可以改变的量称为变量。变量应该有名字,并在内存中占有一定的存储单元。量应该有名字,并在内存中占有一定的存储单元。 变量名是一个标识符。变量名是一个标识符。合法的变量名:合法的变量名: sum, _above, class1, basic sum, _above, class1, basic不合法的变量名:不合法的变量名: M.D.John, 3D6

11、4, ab, #33, $234 M.D.John, 3D64, ab, #33, $234注意:(注意:(1 1)变量名一般用小写字母表示)变量名一般用小写字母表示 (2 2)起变量名应遵循)起变量名应遵循“见名知义见名知义”原则原则 (3 3)变量名不能与关键字同名。)变量名不能与关键字同名。驮炎雀韵馏胳度郭砌燥屋锡县芯纯蝴苞冷占力臭铬陋猜半匈记专像息仑揩第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里4 4) 变量的定义及其目的变量的定义及其目的例:例:int a,b,c;int a,b,c; char c1,c2; char c1,c2;其目

12、的为:其目的为:(1 1)凡未被定义的,不作变量名使用;)凡未被定义的,不作变量名使用;(2 2)指定变量类型后,系统编译时可分配相应)指定变量类型后,系统编译时可分配相应 的存储单元;的存储单元;(3 3)定义变量类型便于编译时检查此变量所)定义变量类型便于编译时检查此变量所 进行的运算是否合法。进行的运算是否合法。C C中变量应先定义后使用。中变量应先定义后使用。确洗耙坠灭汪馏尼攀唤泥授志诈萌刃茅欢捡叫杏刺诗甚将谩缉萨潜恒酋夕第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里 计算机内部的数据和计算机内部的数据和C C语言的数据都是以二进语言的数据

13、都是以二进制补码表示的。补码的最高位为符号位,若为制补码表示的。补码的最高位为符号位,若为0 0,该数为正数;若为该数为正数;若为1 1,该数为负数。符号位与数值,该数为负数。符号位与数值位一起参与运算。位一起参与运算。 正数的补码即其本身。负数的补码可这样求出:正数的补码即其本身。负数的补码可这样求出:(1 1)先求该数的绝对值,再求出对应正数的二进)先求该数的绝对值,再求出对应正数的二进制编码;制编码;(2 2)对二进制编码按位取反;)对二进制编码按位取反;(3 3)对最低位加)对最低位加1 1。补充:数的补码表示补充:数的补码表示泼轩寞趣坎痴脉盟糖捅转偶兄谗碴鞭册准搬与贪也霹坤起吃碱捞蜒

14、跌翅仲第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里求求-2-2的补码(以两个字节表示)的补码(以两个字节表示) (1)(1)求求-2-2的绝对值,的绝对值,|-2|=2|-2|=2, 二进制编码为:二进制编码为:0000 0000 0000 00100000 0000 0000 0010(2 2)按位取反得:)按位取反得:1111 1111 1111 11011111 1111 1111 1101(3 3)最低位加)最低位加1 1: 1111 1111 1111 1101 1111 1111 1111 1101 1 1111 1111 1111

15、1110 1111 1111 1111 1110渡年詹粒涅骂沽腕钉敬宋蕉阂孪弃踏泛鲍淋茨括懊矩肝喂膝借脏澈那铁轮第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里鸟试痹仔肇差馁掏真掉说痹皇遗笺觅固购雅帘慢烬虐二瘴荧秽慕蝎贺素付第三章数据类型运算符与表达式第三章数据类型运算符与表达式3 3、3 3 整型数据整型数据1 1、整型常量、整型常量C C整常数有三种表示形式:整常数有三种表示形式: 十进制:十进制:123123,456456,0 0八进制:以八进制:以0 0开头,开头, 如:如: 0123 0123 等于十进制数等于十进制数8383 011 01

16、1 等于十进制数等于十进制数9 9 十六进制:以十六进制:以0x0x或或0X0X打头打头 如:如:0x123 0x123 等于十进制数等于十进制数291291 0x12 0x12 等于十进制数等于十进制数1818注注: :负数在计算机中表示形式?负数在计算机中表示形式?苟缆羌距搓命挪震胜闻遮钙寐森擒增围故碳讥挽友擒颗谷庇蹬篡薄佣煞惩第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里2 2、 整型变量整型变量整型变量整型变量基本整型基本整型 int int短整型短整型 shortint shortint 长整型长整型 long(int) long(int

17、)无符号型无符号型无符号整型无符号整型unsigned intunsigned int无符号长整型无符号长整型unsigned longunsigned long无符号短整型无符号短整型unsigned shortunsigned short邑肝窒的豌十提巷止硬悄蚊遮棱扩老倘伞刘羚贿惺妄粤袱耗锦游佯帕呈周第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里数据类型(关键字数据类型(关键字)字节个数字节个数取值范围取值范围short2-32768+32767unsigned short20+65535int2-32768+32767unsigned20+6

18、5535long4-21474836482147483647unsigned long404294967295惩钎臼捎见楞咬艾或骂涯贾争落碉皿维应谦上蚜芯喉伶钞硷蹬冷盯慈昨捞第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里0 0 0 0 0 0 00 0 0 0 1 1 0 10int 型0 0 0 0 1 1 0 10 0 0 0 0 0 0 0unsigned int 整数整数1313在存储单元中的存储情况在存储单元中的存储情况话澜彪困挟憎瓶甥抬媚眩淀虐纷京署瘫吨瀑既缺瞥胞招纷散肿瞎摆误阮体第三章数据类型运算符与表达式第三章数据类型运算符与表达式

19、失之毫厘,谬以千里失之毫厘,谬以千里3 3、 整型变量的定义及使用整型变量的定义及使用程序中用到的变量都必须先定义,例如:程序中用到的变量都必须先定义,例如:运行结果: a+u=22 , b+u= - 14忙改定廓围无满兄灌筷螺蝇眶迄焉须嘛贴驮浆酚呼旬惜谐渗柳猴订盎乃嚎第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里4 4、 整型数据的溢出整型数据的溢出 一个一个intint型变量的最大允许值是型变量的最大允许值是32767,32767,如果再加如果再加1,1,其结果会是怎样一种情况其结果会是怎样一种情况? ? 0111111111111111 数值

20、数值:32767:32767+ 0000000000000001 数值数值: 1: 1 1000000000000000 数值数值:-32768:-32768= 它就好像汽车的里程表一样它就好像汽车的里程表一样, ,达到最大值后达到最大值后, ,又又从最小的开始计数从最小的开始计数. . 御狠庐朋达喻牵蚤沥争詹盯驶瓶拴疚挚鲍洞侈贪搂肤邮镍佬率意胃妆堑罚第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里5 5、 整型常量的类型整型常量的类型1. 1. 值在值在32768327683276732767的整常数,认为它是的整常数,认为它是intint型,型,

21、 可赋给可赋给 int int 型和型和 long int long int 型变量型变量; ;2. 2. 值超过上述范围,而在值超过上述范围,而在2 2 2 21 1的整常数,的整常数, 认为它是认为它是 long int long int 型型, ,可赋给可赋给 long int long int 型变量型变量; ;3. 3. 只有非负的整常数可赋给只有非负的整常数可赋给 unsigned unsigned型变量型变量, , 但但 值不能超出该值不能超出该 unsigned unsigned 型变量的取值范围型变量的取值范围; ;4. 4. 整常量后加一个整常量后加一个l l 或或L L,

22、则认为其为,则认为其为 long int long int 型型 常量常量, , 如:如:123L123L,0L0L,432L432L 此常用于函数调用中此常用于函数调用中, ,使形参类型匹配于实参类型。使形参类型匹配于实参类型。3131胡奋跪砚焦泅傀环澄弟象居企无钮儒圾审瞻养均遣矫帘翔筏架拍绒擦潮督第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里3 3、4 4实型数据实型数据1 1、实型常量、实型常量 1)十进制数形式:由数字和小数点组成十进制数形式:由数字和小数点组成 如如: 0.0 , 0.123, -34.6, .678 , 90. : 0.

23、0 , 0.123, -34.6, .678 , 90. 注意:小数点必须有,且其前后数字不能同时缺省。注意:小数点必须有,且其前后数字不能同时缺省。 2) 2)指数形式(科学计数法指数形式(科学计数法):):由尾数,指数和由尾数,指数和 字母字母e e或或E E组成组成 如:如:123E3 123E3 代表代表 12310 12310 注意:注意:E E前必须有数字,前必须有数字,E E后必须为整数后必须为整数 E5 3.4E5.6 E5 3.4E5.6 不合法不合法3黍伤厩圾纱吼话烦临谊抑垒抗杭诚殉匣磐威信赂开踞呈买韵寄俩漫勃叠询第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之

24、毫厘,谬以千里失之毫厘,谬以千里 3) )规范化的规范化的指数指数( (输出输出) )形式形式: :即在字母即在字母e e或或E E之前的小之前的小数部分中数部分中, ,小数点左边应有一位且只能有一位非零的数小数点左边应有一位且只能有一位非零的数字。字。 如:如:2.3478e22.3478e2、3.099E5 3.099E5 等等等等. . 4) 4)实型数据在内存的存放形式实型数据在内存的存放形式: :实型数据是按指数形实型数据是按指数形式存储的式存储的, ,系统把一个实型数据分成小数部分系统把一个实型数据分成小数部分(.xxxxx)(.xxxxx)和指数部分和指数部分( (采用规范化的指

25、数形式采用规范化的指数形式),),分别存放分别存放. . 如如:3.14159:3.14159+ .314159 1 小数部分占的位数越多小数部分占的位数越多, ,精度越高精度越高; ;指数部分占指数部分占的位数越多的位数越多, ,可表示数值范围越大可表示数值范围越大. .们止组榷栈龟太验垃需笋把吕锦滚诚质情遮零急瞥抚洲赖嗡郎桔朗限落挨第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里2 2、实型变量、实型变量单精度型(单精度型(floatfloat) 32 32位位 7 7位有效数字位有效数字 10 10 10 10 双精度型(双精度型(double

26、double) 64 64位位 15 1516 16 位有效数字位有效数字 10 10 10 10 3838308308定义实型变量:定义实型变量: float x , y ; float x , y ; double z , a, b ; double z , a, b ;睛并慑率贤假肪汇凤训橇尤咽版浙雇蓝徒骚湘客甜诧援塘战囤牵奋洞替抹第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里3 3、实型变量的赋值、实型变量的赋值 实型常量不分实型常量不分 float float型和型和doubledouble型型, ,系统按系统按doubledouble型

27、处理型处理, ,若按若按floatfloat型处理型处理, ,可在数值后面加可在数值后面加f f或或F.F. 一个实型常量可赋给一个实型变量(一个实型常量可赋给一个实型变量( float float型或型或doubledouble型),根据变量类型截取实常量中相应的有效型),根据变量类型截取实常量中相应的有效位数。位数。 例:例: float x ; double y ; 则:则: x=222222.222 y=222222.222 注意实型数据的舍入误差;应当避免将一个很大的数和一个很小的数直接相加减;同理1.0/3*3!=1革氟屈倡暴歇嗓尽膨柏嚣检摄怠迂边舟榷甥奇喉憨衔慨喊损眺蓟排或学甘第

28、三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里3.5 3.5 字符型数据字符型数据1 1 1 1、字符常量、字符常量、字符常量、字符常量 1 1) 一般形式字符常量:一般形式字符常量: 用单引号括起来的单个字符。如:用单引号括起来的单个字符。如: A A,?,= = 2 2) 转义字符序列:转义字符序列: 以以 开头的字符序列,可表示任何开头的字符序列,可表示任何可输出的字母字符,专用字符,图形字符可输出的字母字符,专用字符,图形字符和控制字符如和控制字符如nn为换行控制符为换行控制符 舶怠垃局换见实鞍箭玩圆榨祭谈殊源蕊避九彤汐派壤染凯岂酵尿辅帅阔再

29、第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里n n n n 换行将当前位置移到下一行开头换行将当前位置移到下一行开头换行将当前位置移到下一行开头换行将当前位置移到下一行开头 t t t t 水平制表水平制表水平制表水平制表( ( ( (跳到下一个跳到下一个跳到下一个跳到下一个tabtabtabtab位置位置位置位置) ) ) )b b b b 退格退格退格退格, , , ,将当前位置移到前一列将当前位置移到前一列将当前位置移到前一列将当前位置移到前一列r r r r 回车回车回车回车, , , ,将当前位置移到本行开头将当前位置移到本行开头将当前

30、位置移到本行开头将当前位置移到本行开头f f f f 换页换页换页换页, , , ,将当前位置移到本页开头将当前位置移到本页开头将当前位置移到本页开头将当前位置移到本页开头 反斜杠字符反斜杠字符反斜杠字符反斜杠字符 单引号单引号单引号单引号( ( ( (撇号撇号撇号撇号) ) ) )字符字符字符字符” ” ” ” 双引号字符双引号字符双引号字符双引号字符ddd 1ddd 1ddd 1ddd 1到到到到3 3 3 3位位位位8 8 8 8进制数所代表的字符进制数所代表的字符进制数所代表的字符进制数所代表的字符xhh 1xhh 1xhh 1xhh 1到到到到2 2 2 2位位位位16161616进

31、制数所代表的字符进制数所代表的字符进制数所代表的字符进制数所代表的字符告谢魔央湿裂豁寂踞谩帝吃雏疚须官堆资横德奎辖钻截灯魂哈宰使氛寺罪第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里2 2、 字符变量字符变量 用来存放一个字符常量。用来存放一个字符常量。用来存放一个字符常量。用来存放一个字符常量。 定义形式:定义形式: char c1,c2 ; 赋值:赋值:c1 = c1 = O O ; c2 = ; c2 = K K; ; 则:则:printf(printf(%c %c n %c %c n ,c1 , c2); ,c1 , c2);输出:输出:O

32、KO K一个字符变量在内存中占一个字节。一个字符变量在内存中占一个字节。揩撅纺绪棺侦裳笼膛乙单噎及篮踢袜根残祖怠驾如匿糕摄兢姑吕苟泞钟缸第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里3 3、 字符数据在内存中的存储形式及其使用方法字符数据在内存中的存储形式及其使用方法 1 1)字符数据在内存中存放的是其)字符数据在内存中存放的是其ASCIIASCII值。值。 例:例: char c1, c2; char c1, c2; c1 = c1 = a a ; c2 = ; c2 = b b ; ; 则:则: 9798c1c20 1 1 0 0 0 0 10

33、 1 1 0 0 0 1 0液倾蛮傍候赶连蓉珍绳坚溜缅虹韩标溃庸囱光倘夏尔蝇萨哺拥罕谚稿矢水第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里2 2) C C中,整型数据和字符型数据之间可通用中,整型数据和字符型数据之间可通用 (1 1)程序中,字符数据既可按字符形式输出,)程序中,字符数据既可按字符形式输出, 也可以整数形式输出。也可以整数形式输出。 由输出格式字符串由输出格式字符串 %c %c 和和 %d %d 决定。决定。 (2 2)字符数据可进行算术运算,字符变量)字符数据可进行算术运算,字符变量 既可赋值以字符常量,也可赋以相应的既可赋值以字

34、符常量,也可赋以相应的 ASCII ASCII值。值。 C C的整型数据与字符数据间可相互赋值。的整型数据与字符数据间可相互赋值。猩睬沽蒙鸣货豫搜旬悼彪映武缆恍八洼棋游雍萝嘻彰宏斥砸戳矗朋尚斋迭第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里运行结果:运行结果: a b a b A B A B责豆鸣闪候移镑浩凛回认脚乓发涯嚼渺暴涪画舱焊裸佰欠不颜救蔫厅乌尿第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里4 4、 字符串常量字符串常量一对双引号括起来的字符序列。例:一对双引号括起来的字符序列。例:a a, ,

35、 How do you do. How do you do., China China , , abcn abcn, , $123.45 $123.45C C规定:规定:在内存中,系统自动在每个字符串的在内存中,系统自动在每个字符串的结尾加上一个字符串结束标志结尾加上一个字符串结束标志00,以便,以便系统据此判断字符串结束标志。系统据此判断字符串结束标志。所以,所以,“a” “a” 在内存中占两个字节。在内存中占两个字节。a0庞缘硬飞井磨俯燥恼蕾鸡涅鳞鞘痪舅财跳想颓曹蔗本盖阳麓扶仆丙细如丹第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里char c

36、;char c ; c = c = a a ; ; c = c = a a ; ;C C 中无专门的字符串变量,如需要,可用中无专门的字符串变量,如需要,可用字符数组来存放。字符数组来存放。注意:字符常量和字符串常量不可混淆。注意:字符常量和字符串常量不可混淆。桅绊君变小裴错袁腊乔冶寒腋灶跋薪敏渣寂瘪焰坎掘降草咽靛焚旭脂炒丝第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里3.6 3.6 变量赋初值变量赋初值例例例例1 1: int a=3 int a=3; float f=3.56 float f=3.56; char c=a; char c=a;例

37、例例例2 2: int a,b,c=3; int a,b,c=3;错例:错例:错例:错例: int a=b=c=3; int a=b=c=3; 此些变量的初始化不是在编译阶段完成此些变量的初始化不是在编译阶段完成, ,而是在程序执行本函数时赋予初值的而是在程序执行本函数时赋予初值的, ,相当于相当于有一个赋值语句。有一个赋值语句。茵疥叙瘁怒莎殃坪申救盟景热孝米剩尊镰迷位悔供剧万琐憎子咳帽镀鲍符第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里3.7 3.7 数值型数据间的混合运算数值型数据间的混合运算C C中,整型,字符型,实型(包括单精度,中,整型,

38、字符型,实型(包括单精度,双精度)数据可出现在一个表达式中进行双精度)数据可出现在一个表达式中进行混合运算。混合运算。类型自动转换规则类型自动转换规则高高低低double floatlongunsignedint char, short父范御肖存片惜淆葬蚊拭堕叹端励宪抱转尸浆央记鼎墟颤钙量署橙淖温瘸第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里例:例:int i ; floatint i ; float f ; f ; double d ; long e ; double d ; long e ;则:则:10 10 a a+ i * f - d /

39、 e + i * f - d / e 合法合法转换次序:转换次序: (1 1)计算)计算 10 10a a, , 结果为整数结果为整数107107 (2 2)计算)计算 i*f , i*f , 结果为结果为doubledouble型型 (3 3)整数)整数107107与与i*fi*f的积相加,结果为的积相加,结果为doubledouble型型 (4 4)计算)计算 d/e d/e , 结果为结果为doubledouble型型 (5 5)将)将1010a a+i * f +i * f 的结果与的结果与 d/e d/e 的商的商 相减,结果为相减,结果为doubledouble型。型。主炽赤缄据膨

40、辩冗蒙渴棠蜂喇案如就冬练肢逝噬膘想狭旭沉直米兔基失汾第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里3 3、8 8 算术运算符和算术表达式算术运算符和算术表达式1 1、运算符的种类、优先级和结合性、运算符的种类、优先级和结合性 语言中运算符和表达式数量之多,语言中运算符和表达式数量之多, 在高级在高级语言中是少见的。正是丰富的运算符和表达式使语言中是少见的。正是丰富的运算符和表达式使语言功能十分完善。语言功能十分完善。 这也是语言的主要特点这也是语言的主要特点之一。之一。 语言的运算符不仅具有不同的优先级,语言的运算符不仅具有不同的优先级, 而而且还

41、有一个特点,就是它的结合性。在表达式中,且还有一个特点,就是它的结合性。在表达式中,各运算量参与运算的先后顺序不仅要遵守运算符各运算量参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性的制约,优先级别的规定,还要受运算符结合性的制约, 以以便确定是自左向右进行运算还是自右向左进行运算。便确定是自左向右进行运算还是自右向左进行运算。这种结合性是其它高级语言的运算符所没有的,因此这种结合性是其它高级语言的运算符所没有的,因此也增加了语言的复杂性。也增加了语言的复杂性。户索悸伺稀虾狡折洁犁省摹沈馁秀妥菏匿丑碧垛汽看豪拎屈缮栈柒皇药僻第三章数据类型运算符与表达式第三章数据类型运算符与

42、表达式失之毫厘,谬以千里失之毫厘,谬以千里淮磅哟磐甥屈劣仁缺懂寸疹枚镀琴颧聪吮仿路惮结邀眩仇燕丈忠撼哭爆窑第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里2. 2. 算术运算符和算术表达式算术运算符和算术表达式1 1) 基本算术运算符基本算术运算符 * / % * / %(模除,或称求余)(模除,或称求余) 例:例:7 % 3 7 % 3 值为值为 1 1 5/3 = 1, -5/3 = -1 5/3 = 1, -5/3 = -1 若参加运算的两个数中有一个为实数,则若参加运算的两个数中有一个为实数,则结果为结果为doubledouble型。型。求余

43、运算(求余运算(% %)要求参与运算的量均为整型。)要求参与运算的量均为整型。其结果等于两数相除后的余数。其结果等于两数相除后的余数。 狙淫沂垢眺座栏仔凯艰哮滇虐轧蛛发壕娇歹遁侵症聋储蛤忽蝎喝堪酷母圾第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里main( )main( ) printf(nn%d,%dn,20/7,-20/7); printf(nn%d,%dn,20/7,-20/7); printf(%f,%fn,20.0/7,-20.0/7); printf(%f,%fn,20.0/7,-20.0/7); 参与运算量均为整型时,参与运算量均为整

44、型时, 结果也为整型,舍去小数。结果也为整型,舍去小数。 如果运算量中有一个是实型,则结果为双精度实型。如果运算量中有一个是实型,则结果为双精度实型。 本例中,本例中,20/720/7,-20/7-20/7的结果均为整型,小数全部舍的结果均为整型,小数全部舍去。而去。而 20.0/7 20.0/7和和-20.0/7-20.0/7由于有实数参与运算,因此由于有实数参与运算,因此结果也为实型。结果也为实型。觅耳饺熄皑掉富序所钾叔鄙蘑式棵喊阑辱顷藕答增料赋拷台腺肩棋量蜗溯第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里2 2) 算术表达式算术表达式 表达式

45、是由常量、变量、函数和运算符组合起来表达式是由常量、变量、函数和运算符组合起来的式子。的式子。 一个表达式有一个值及其类型,一个表达式有一个值及其类型, 它们等于它们等于计算表达式所得结果的值和类型。表达式求值按运算计算表达式所得结果的值和类型。表达式求值按运算符的优先级和结合性规定的顺序进行。符的优先级和结合性规定的顺序进行。 单个的常量、单个的常量、变量、函数可以看作是表达式的特例。变量、函数可以看作是表达式的特例。 算术表达式是由算术运算符和括号连接起来的式算术表达式是由算术运算符和括号连接起来的式子,子, 以下是算术表达式的例子:以下是算术表达式的例子: a+b (a*2)a+b (a

46、*2)c (x+r)*8-(a+b)c (x+r)*8-(a+b)7 7 +i sin(x)+sin(y) (+i)-(j+)+(k-) +i sin(x)+sin(y) (+i)-(j+)+(k-) 忘酮赞老轴洞撰棺滨溪暮腑谗怔梦蠢唬煌涪吃灵脂芝凉皂邵鲁捞钨炳掏滋第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里注意:注意:C C语言算术表达式的书写形式类似于数学中语言算术表达式的书写形式类似于数学中的代数表达式,但有区别:的代数表达式,但有区别:(1) a * b (1) a * b 不能写为不能写为 ab ab、ab ab 、a.ba.b(2)

47、c / d (2) c / d 不能写为不能写为 cd cd 、cd(3) e-(f+(g-h)/(i-j)+k (3) e-(f+(g-h)/(i-j)+k 不能写为不能写为 e-f+(g-h)/(i-j)+k e-f+(g-h)/(i-j)+k (4) 3.14*r*r (4) 3.14*r*r 不能写为不能写为*r*2 *r*2 或或 3.14*r2 3.14*r2(5) sin( x ) (5) sin( x ) 不能写为不能写为 sinx sinx(6) log( x ) (6) log( x ) 不能写为不能写为 lnx lnx log10( x ) log10( x ) 不能写为

48、不能写为 logx logx10祁扎验荆戏淑吉贰冕贬盐舀阮疼知腰翁片滴喇论讯呸缔昆蘑辆扫诛健叉测第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里3 3、 算术运算符的优先级和结合性算术运算符的优先级和结合性1 1) 优先级:指表达式运算时应按运算符的优先级:指表达式运算时应按运算符的优先级别高低次序进行,例:优先级别高低次序进行,例: ( ) 高高 * / % * / % + - + - 低低 如:如:a-b*c a-b*c 相当于相当于 a-(b*c ) a-(b*c )酷醉纽隐呼沟瘦披甩拂穷奶型都登炽骗疡驶绰堆握成谰幻肌怒粗堆抱幼疡第三章数据类型

49、运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里2 2) 结合性:先按运算符的优先级别高低依次进行结合性:先按运算符的优先级别高低依次进行. .若在一个运算对象两侧的运算符的优先级相同,若在一个运算对象两侧的运算符的优先级相同,则按规定的则按规定的“结合方向结合方向”处理。处理。 算术运算符的结合方向自左向右算术运算符的结合方向自左向右: :运算对象先运算对象先与左面的运算符结合与左面的运算符结合. .称为称为 左结合性。左结合性。 例:例: a-b+c a-b+c 相当于相当于 (a-b)+c (a-b)+c幸室厢磺诊围阐颗拆祖敞度焙睡工仑术握硝馁初测郡贸缔哎千

50、五蕉靡碍鄂第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里4 4、 强制类型转换运算强制类型转换运算 作用作用 :将一个表达式转换成所需类型:将一个表达式转换成所需类型 形式形式 :(类型名)(表达式):(类型名)(表达式) 例:例:(double)a(double)a (int) (x+y) (int) (x+y) (float) (5%3) (float) (5%3)说明:强制类型转换时,得到一个所需类型的说明:强制类型转换时,得到一个所需类型的中间变量,而原来变量的类型未发生变化。中间变量,而原来变量的类型未发生变化。举例:举例:float x

51、=2.5; int i; i=(int)x;float x=2.5; int i; i=(int)x;景勘割券脚坛巴饼舷白叭字担冈俐腮桶降删准彬坛局腆沸托簇愈峨辈颧屠第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里5 5、自增,自减运算符、自增,自减运算符 自增运算符记为自增运算符记为“+”“+”,其功能是使变量的值自增,其功能是使变量的值自增1 1。 自减运算符记为自减运算符记为“-”“-”,其功能是使变量值自减,其功能是使变量值自减1 1。 可有以下几种形式:可有以下几种形式:+i i+i i自增自增1 1后后i i再参与表达式整体的其它运算。再

52、参与表达式整体的其它运算。-i i-i i自减自减1 1后后i i再参与表达式整体的其它运算。再参与表达式整体的其它运算。i+ ii+ i参与表达式整体的运算后,参与表达式整体的运算后,i i的值再自增的值再自增1 1。i- ii- i参与表达式整体的运算后,参与表达式整体的运算后,i i的值再自减的值再自减1 1。 在理解和使用上容易出错的是在理解和使用上容易出错的是i+i+和和i-i-。 特别是当特别是当它们出在较复杂的表达式或语句中时,常常难于弄清,因它们出在较复杂的表达式或语句中时,常常难于弄清,因此应仔细分析。此应仔细分析。翔埋殿教你暖屉棺祭觉憨挟幻瘪混她茨磊打吐逗扒插耗铺蛹甜斥湛脐

53、衔封第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里注意:注意: 1 1)自增、自减运算符只能用于变量,而不能用于)自增、自减运算符只能用于变量,而不能用于常量或表达式。如常量或表达式。如 5+ 5+ (a+ba+b)+ + 都是不合法的。都是不合法的。 2 2)+和和-的结合方向是的结合方向是“自右向左自右向左”。如。如 -i+ -i+ 应理解为应理解为- -(i+i+) 而不是而不是 (-i-i)+ 3 3)自增、自减运算符常用于循环语句中)自增、自减运算符常用于循环语句中, ,使循环变使循环变量自动加量自动加1,1,也用于指针变量也用于指针变量

54、, ,使指针指向下一个地址使指针指向下一个地址. .闭笨寇率叁忘橙吃脆柬云夯诲书机青尘肯跳昨浊虽传妊梗诗访诬荤鞭肘掇第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里 main( ) main( ) int i=8; int i=8; printf(%dn,+i); 9 printf(%dn,+i); 9 printf(%dn,-i); 8 printf(%dn,-i); 8 printf(%dn,i+); 8 printf(%dn,i+); 8 printf(%dn,i-); 9 printf(%dn,i-); 9 printf(%dn,-i+);

55、-8 printf(%dn,-i+); -8 printf(%dn,-i-); -9 printf(%dn,-i-); -9 i i的初值为的初值为8 8,第,第2 2行行i i加加1 1后输出为后输出为9 9;第;第3 3行减行减1 1后输出后输出为为8 8;第;第4 4行输出行输出i i为为8 8之后再加之后再加1(1(为为9)9);第;第5 5行输出行输出i i为为9 9之后再减之后再减1(1(为为8) 8) ;第;第6 6行输出行输出-8-8之后再加之后再加1(1(为为9)9),第,第7 7行输出行输出-9-9之后再减之后再减1(1(为为8)8)。捆娱必驯伺盐淘凡疮藕煌匿喷跟粤旨唬讥革

56、幂肺岭呕枣起彭遏均票辜眶豪第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里 main() main() int i=5,j=5,p,q; int i=5,j=5,p,q; p=(i+)+(i+)+(i+); p=(i+)+(i+)+(i+); q=(+j)+(+j)+(+j); q=(+j)+(+j)+(+j); printf(%d,%d,%d,%d,p,q,i,j); printf(%d,%d,%d,%d,p,q,i,j); i-5,j-5 i-5,jp,i+1-i,i+1-i,i+1-i i+i+i-p,i+1-i,i+1-i,i+1-i j+1

57、-j,j+1-j,j+1-j,j+j+j-q j+1-j,j+1-j,j+1-j,j+j+j-q 这个程序中,对这个程序中,对P=(i+)+(i+)+(i+)P=(i+)+(i+)+(i+)应理解为三应理解为三个个i i相加,故相加,故P P值为值为1515。然后。然后i i再自增再自增1 1三次相当于加三次相当于加3 3故故i i的最后值为的最后值为8 8。 而对于而对于q q 的值则不然,的值则不然,q=(+j)+(+j)+(+j)q=(+j)+(+j)+(+j)应理应理解为解为q q先自增先自增1 1,再参与运算,由于,再参与运算,由于q q自增自增1 1三次后值为三次后值为8 8,三个

58、三个8 8相加的和为相加的和为2424,j j的最后值仍为的最后值仍为8 8。劣膏弓只属畴便犯刑咖携灯拭盲浅杭釜峻掣檬腋岛献羽坐瞒拇藕漓膀渗送第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里3 3、9 9 赋值运算符和赋值表达式赋值运算符和赋值表达式 1 1、简单赋值运算符和表达式、简单赋值运算符和表达式 简单赋值运算符记为简单赋值运算符记为“=”“=”。由。由“= ”“= ”连接连接 的式子称为赋值表达式。其一般形式为:的式子称为赋值表达式。其一般形式为: 变量变量= =表达式表达式 例如:例如:例如:例如: x=a+bx=a+b w=sin(a)

59、+sin(b) w=sin(a)+sin(b) y=i+ + -j y=i+ + -j 赋值表达式的功能是计算表达式的值再赋予左边赋值表达式的功能是计算表达式的值再赋予左边 的变量。赋值运算符具有右结合性。因此的变量。赋值运算符具有右结合性。因此 a=b=c=5 a=b=c=5 可理解为可理解为 a=(b=(c=5) a=(b=(c=5)呻迄讲蹲柱吩膀颧螺辟土息譬腔杠销凄伞苞捻恤终包涸氟俊萤图罢靖囚纠第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里关于简单赋值运算符及赋值表达式的说明:关于简单赋值运算符及赋值表达式的说明: 1 1)在其它高级语言中,

60、赋值构成了一个语句,称为)在其它高级语言中,赋值构成了一个语句,称为赋值语句。赋值语句。 而在而在C C中,把中,把“=”“=”定义为运算符,从而组定义为运算符,从而组成赋值表达式。成赋值表达式。 凡是表达式可以出现的地方均可出现凡是表达式可以出现的地方均可出现赋值表达式。例如,式子赋值表达式。例如,式子x=(a=5)+(b=8)x=(a=5)+(b=8)是合法的。它是合法的。它的意义是把的意义是把5 5赋予赋予a a,8 8赋予赋予b b,再把表达式,再把表达式a=5,b=8a=5,b=8的值的值相加,和赋予相加,和赋予x x,故,故x x应等于应等于1313。 2 2)在语言中也可以组成赋

61、值语句,按照语言规)在语言中也可以组成赋值语句,按照语言规定,定, 任何表达式在其未尾加上分号就构成为语句。因任何表达式在其未尾加上分号就构成为语句。因此,如此,如x=8;a=b=c=5x=8;a=b=c=5;都是赋值语句。;都是赋值语句。蹈拙官惭捣橡慷柏绚澈闺蔡樟咨歉给袍黎左钾芋臆剪躁抨勒些戳酚荔融蒸第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里赋值时的类型转换赋值时的类型转换 如果赋值运算符两边的数据类型不相同,如果赋值运算符两边的数据类型不相同, 系统将自系统将自动进行类型转换,即把赋值号右边的类型换成左边的类动进行类型转换,即把赋值号右边的

62、类型换成左边的类型。具体规定如下:型。具体规定如下: 1. 1.实型赋予整型,舍去小数部分。前面的例子已经实型赋予整型,舍去小数部分。前面的例子已经说明了这种情况。说明了这种情况。 2. 2.整型赋予实型,数值不变,但将以浮点形式存放,整型赋予实型,数值不变,但将以浮点形式存放, 即增加小数部分即增加小数部分( (小数部分的值为小数部分的值为0)0)。 3. 3.字符型赋予整型,由于字符型为一个字节,字符型赋予整型,由于字符型为一个字节, 而整而整型为二个字节,故将字符的型为二个字节,故将字符的ASCIIASCII码值放到整型量的低八码值放到整型量的低八位中,高八位为位中,高八位为0 0。 4

63、. 4.整型赋予字符型,只把低八位赋予字符量。整型赋予字符型,只把低八位赋予字符量。瘪奸蟹弱滔柯丈丹恋造修词摩鞘攀坠拯人黔纸兑丫嚏梨柯疗汰材腕鸿时炕第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里 main() int a,b=322; float x,y=8.88; char c1=k,c2; a=y; x=b; a=c1; c2=b; printf(%d,%f,%d,%c,a,x,a,c2); 本例表明了上述赋值运算中类型转换的规则:本例表明了上述赋值运算中类型转换的规则: a a为整型,赋以实型量为整型,赋以实型量y y值值8.888.88后只

64、取整数后只取整数8 8。 x x为实型,赋以整型量为实型,赋以整型量b b值值322322, 后增加了小数部分。后增加了小数部分。 字符型量字符型量c1c1赋以赋以a a变为整型,变为整型, 整型量整型量b b赋予赋予c2 c2 后取其低八位成为字符型后取其低八位成为字符型(b(b的低八位的低八位 为为0100001001000010,即十进制,即十进制6666,按,按ASCIIASCII码对应于字符码对应于字符B)B)。 莫利锈陆嘿山徐丸署舶渍庆远豌哟漱翟匈绞遭迎氮拈器迪挫创击刨操骤力第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里2.2.复合赋值

65、符及表达式复合赋值符及表达式 在赋值符在赋值符“=”“=”之前加上其它二目运算符可构成复之前加上其它二目运算符可构成复合赋值符。如合赋值符。如+=,-=,*=,+=,-=,*=,=,%=,=,&=,=,|=,%=,=,&=,=,|=。 构成复合赋值表达式的一般形式为:构成复合赋值表达式的一般形式为: 变量变量 双目运算符双目运算符= =表达式表达式 它等效于它等效于 变量变量= =变量变量 运算符运算符 表达式表达式 例如:例如: a+=5 a+=5 等价于等价于a=a+5a=a+5 x*=y+7 x*=y+7 等价于等价于x=x*(y+7)x=x*(y+7) r%=p r%=p 等价于等价于

66、r=r%pr=r%p 复合赋值符这种写法,对初学者可能不习惯,复合赋值符这种写法,对初学者可能不习惯, 但十但十分有利于编译处理,能提高编译效率并产生质量较高的分有利于编译处理,能提高编译效率并产生质量较高的目标代码。目标代码。折豆爱来章候镣画熟婆仇峪后茬靠铜台扼染札初娱杖忙鉴瞻筏蜘投撰尺掩第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里3 3、10 10 逗号运算符和逗号表达式逗号运算符和逗号表达式 在语言中逗号在语言中逗号“,”也是一种运算符,称为逗也是一种运算符,称为逗号号运算符。运算符。 其功能是把两个表达式连接起来组成一个表达其功能是把两个

67、表达式连接起来组成一个表达式,称为逗号表达式。其一般形式为:式,称为逗号表达式。其一般形式为: 表达式表达式1 1,表达式,表达式2 2 其求值过程是分别求两个表达式的值,并以表达式其求值过程是分别求两个表达式的值,并以表达式2 2的值作为整个逗号表达式的值。的值作为整个逗号表达式的值。悬馒胜货坤马鞋啊刑冤砂绢竹否酱嫩逗程被睦绊疏聪账淌募瀑综容猪讶拼第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里 main()main() int a=2,b=4,c=6,x,y; int a=2,b=4,c=6,x,y; y=(x=a+b),(b+c); y=(x=

68、a+b),(b+c); z=(x=a+b),(b+c); z=(x=a+b),(b+c); printf(z=%d,y=%d,x=%d,z,y,x); printf(z=%d,y=%d,x=%d,z,y,x); a-2,b-4,c-6,x-0,y-0 a-2,b-4,c-6,x-0,y-0 x-a+b,y-x z- b+c x-a+b,y-x z- b+c本例中,本例中,z z等于整个逗号表达式的值,也就是表达式等于整个逗号表达式的值,也就是表达式2 2的值,的值,x x是第一个表达式的值。是第一个表达式的值。拳睹既牧幼即肢嘴愧潦恐者掸蹬检匀埠奠韩汪蕾悔顽摧巩抬概功废垢画报第三章数据类型运算符

69、与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里 2. 2.程序中使用逗号表达式,通常是要分别求逗号表达式内各表达程序中使用逗号表达式,通常是要分别求逗号表达式内各表达 式的值,并不一定要求整个逗号表达式的值。式的值,并不一定要求整个逗号表达式的值。 3. 3.并不是在所有出现逗号的地方都组成逗号表达式,如在变量说并不是在所有出现逗号的地方都组成逗号表达式,如在变量说 明中,函数参数表中逗号只是用作各变量之间的间隔符。明中,函数参数表中逗号只是用作各变量之间的间隔符。对于逗号表达式还要说明几点:对于逗号表达式还要说明几点: 1. 1.逗号表达式一般形式中的表达式逗号表达

70、式一般形式中的表达式1 1和表达式和表达式2 2 也可以又是逗号也可以又是逗号表达式。例如:表达式。例如: 表达式表达式1 1,( (表达式表达式2 2,表达式,表达式3) 3) 形成了嵌套情形。因此可以把逗号表达式扩展为以下形式:形成了嵌套情形。因此可以把逗号表达式扩展为以下形式: 表达式表达式1 1,表达式,表达式2 2,表达式表达式n n 整个逗号表达式的值等于表达式整个逗号表达式的值等于表达式n n的值。的值。属碘植腔赫标焕漳障侗仇膏暴辱酉群瞥震热衰粕限臼悟岂缄嘴钻怂黍祁篱第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里3 3、1111 位运

71、算位运算 C C语言是为描述系统而设计的,因此它具有汇编语言所能完语言是为描述系统而设计的,因此它具有汇编语言所能完成的一些功能。在系统软件中,常要处理二进制位的问题。例成的一些功能。在系统软件中,常要处理二进制位的问题。例如如: :将一个存储单元中的各二进位左移或右移一位,两个数按位将一个存储单元中的各二进位左移或右移一位,两个数按位相加等等。相加等等。C C语言提供了位运算功能,与其他语言相比更具有其独语言提供了位运算功能,与其他语言相比更具有其独特的优越性。特的优越性。 所谓位运算是指进行二进制位的运算。所谓位运算是指进行二进制位的运算。迷甄符疟国姿渠辑匿三泡湍瘫哉按镍绽雁亦骗痊潜厉弹厅

72、怨蝗震兄薄颤叮第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里1.1.位运算和位运算符位运算和位运算符C C语言提供了下列位运算符:语言提供了下列位运算符: 运算符运算符 含含 义义 解解 释释 & & 按位与按位与 若两个二进位都为若两个二进位都为1 1,结果为,结果为1 1,否则为,否则为0 0 | | 按位或按位或 若两个二进位都为若两个二进位都为0 0,结果为,结果为0 0,否则为,否则为1 1 按位异或按位异或 若两个二进位同号,则结果为若两个二进位同号,则结果为0 0,否则为,否则为1 1 单目取反单目取反 对一个二进制数按位取反:对一个

73、二进制数按位取反:1 1变变0 0,0 0变变1 1 右右 移移 将一个二进制数全部右移,对于无符号数,将一个二进制数全部右移,对于无符号数, 左端补左端补0 0;对于有符号数:正数补;对于有符号数:正数补0 0,负数补,负数补 1 1(算术右移)。(算术右移)。 右移一位相当于除以右移一位相当于除以2 2。隶欧顿吼段壳敝蛛辨遥己裳例约烧驰种兔旷转苔错毖隙雀志串贪坤巡他肛第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里说明:说明: 1 1)位运算中除了)位运算中除了 外,均为二目运算符,即要求两侧各有外,均为二目运算符,即要求两侧各有一个运算量。一个

74、运算量。 2 2)运算量只能是整型或字符型数据,不能为实型数据。)运算量只能是整型或字符型数据,不能为实型数据。1 1、& &运算运算 例如:例如:3&5 3&5 00000011 00000011 & 00000101 & 00000101 00000001 00000001特殊用途:特殊用途: 1 1)清零:原来数中为)清零:原来数中为1 1的位,新数中相应位为的位,新数中相应位为0 0。 2 2)保留某些指定位:新)保留某些指定位:新数中对应位为数中对应位为1 1。 3 3)保留某一位:新数中)保留某一位:新数中该位取该位取1 1。黎峦匈喇午挤额卖粪伺情捻易至察犁研阑簿馈扬颇型白弃住活败

75、狠确骚躇第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里2 2、| |运算运算 例如:例如:3&5 3&5 00000011 00000011 | 00000101 | 00000101 00000111 000001113 3、 运算运算 例如:例如:3&5 3&5 00000011 00000011 00000101 00000101 00000110 000001103 3、 运算特殊用途运算特殊用途 1 1)使特定位翻转:新数)使特定位翻转:新数翻转位翻转位 置置1 1。 2 2)保留原值:与)保留原值:与0 0相相 3 3)交换两个数,不用

76、临)交换两个数,不用临时变量。时变量。贾哭莱畜亨歧脯茁悄溪星垄瞄叭税捐哇哺沉睹氮唾汗廉筛使积傣磁掇菲藩第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里4 4、 运算运算 例如:例如:5 5 00000101 00000101 11111010 11111010 运算符的优先级比算术运算符、关系运算符、逻辑运算符和运算符的优先级比算术运算符、关系运算符、逻辑运算符和其他位运算符都高,例如:其他位运算符都高,例如:a&b,a&b,先进行先进行aa运算,然后进行运算,然后进行& &运运算。算。茧柏叉环盖咒黍头襟鲜莫妈卯垛沸锋暂煌吼馋秩搀逼苟肾浇如谴椒厨琴蹭

77、第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里5 5、左移运算符、左移运算符 例如:例如:a=15;a=a2; a=15;a=a00111100 00001111=00111100 左移左移1 1位相当于该数乘以位相当于该数乘以2 2。但此结论只适合于该数左移时。但此结论只适合于该数左移时舍弃位中不包含舍弃位中不包含1 1的情况。的情况。6 6、右移运算符、右移运算符 例如:例如:a=15;a=a2; a=15;a=a2; 00001111=00000011 00001111=00000011 右移右移1 1位相当于该数除以位相当于该数除以2 2。

78、但是需注意到符号位问题。但是需注意到符号位问题。傅校呛滋序猫藏酮喻埠肤疮暴丁萎铰纠熟堑誓责描貉垫宁边抨趴侈滋待踢第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里7 7、位运算赋值运算符、位运算赋值运算符 位运算符与赋值运算符可以组成复合赋值运算符位运算符与赋值运算符可以组成复合赋值运算符 如如:&=, |=, =, =, =, = 例如:例如:a&=b a&=b 相当于相当于 a=a&b. a=a&b.8 8、不同长度数据进行位运算、不同长度数据进行位运算 如果两个数据长度不同,进行位运算时,系统会将二者按如果两个数据长度不同,进行位运算时,系统会将

79、二者按右端对齐。右端对齐。 如:如:a&b a&b (a a为为long ,blong ,b为为intint) 注意:如果注意:如果b b为正数,则左侧为正数,则左侧1616位补位补0 0。若。若b b为负数,左侧为负数,左侧补满补满1 1。如果。如果b b为无符号整数,则左侧补满为无符号整数,则左侧补满0 0。怒啼狰泥横纠棵佑涨拈崔胸峡贴拱葫搭腑猩凶妹莉链真问柒铭企将再钢联第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里 小小 结结 1.的数据类型的数据类型 基本类型,构造类型,指针类型,空类型基本类型,构造类型,指针类型,空类型2.基本类型的分类

80、及特点基本类型的分类及特点 类型说明符类型说明符 字节字节 数值范围数值范围 字符型字符型 char 1 C字符集字符集 基本整型基本整型 int 2 -3276832767 短整型短整型 short int 2 -3276832767 长整型长整型 long int 4 -231231-1 无符号型无符号型 unsigned 2 065535 无符号长整型无符号长整型 unsigned long 4 0232-1 单精度实型单精度实型 float 4 10-3810+38 双精度实型双精度实型 double 8 10-30810+308骤俯卡我歇绒痹劫肩福讽讳脯栋戊缅保素贯挛搓拄沽苇郸祁饶飘

81、孪雍再微第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里3.3.常量前缀、后缀常量前缀、后缀 前缀:八进制整常数加前缀:八进制整常数加0 0 十六进制整常数加十六进制整常数加0X0X或或0x0x 后缀后缀? ?长整型加长整型加L L或或l l 4.4.常量类型常量类型 整数,长整数,无符号数,浮点数,字符,字符串,整数,长整数,无符号数,浮点数,字符,字符串,符号常数,转义字符。符号常数,转义字符。5.5.数据类型转换数据类型转换自动转换自动转换: :在不同类型数据的混合运算中,由系统自动实在不同类型数据的混合运算中,由系统自动实现转换,由少字节类型

82、向多字节类型转换。现转换,由少字节类型向多字节类型转换。 不同类型的不同类型的量相互赋值时也由系统自动进行转换,把赋值号右边的类量相互赋值时也由系统自动进行转换,把赋值号右边的类型转换为左边的类型。型转换为左边的类型。强制转换强制转换: :由强制转换运算符完成转换。由强制转换运算符完成转换。润散益拒讳匀移民饯便恨摧抡存谐菩苞郝惕号琐捧炉户埃阵痞嘻锡平熔穴第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里7.7.表达式表达式 表达式是由运算符连接常量、变量、函数所组成的表达式是由运算符连接常量、变量、函数所组成的式子。式子。 每个表达式都有一个值和类型。

83、每个表达式都有一个值和类型。 表达式求值按表达式求值按运算符的优先级和结合性所规定的顺序进行。运算符的优先级和结合性所规定的顺序进行。6.6.运算符优先级和结合性运算符优先级和结合性 一般而言,单目运算符优先级较高,赋值运算符优先一般而言,单目运算符优先级较高,赋值运算符优先级级低。算术运算符优先级较高,关系和逻辑运算符优先级较低。算术运算符优先级较高,关系和逻辑运算符优先级较低。多数运算符具有左结合性,单目运算符、三目运算符、低。多数运算符具有左结合性,单目运算符、三目运算符、 赋值运算符具有右结合性。赋值运算符具有右结合性。度旷惮底屋傲吹方亥烷衡整芳清更围程亭闻蒸恿傣比艺瞎弊缨刑律甜徘侩第三章数据类型运算符与表达式第三章数据类型运算符与表达式失之毫厘,谬以千里失之毫厘,谬以千里8.8.位运算符:位运算符: 运算符运算符 含含 义义 & & 按位与按位与 | | 按位或按位或 按位异或按位异或 单目取反单目取反 右右 移移燎钢佃托洒绘葫敦奎冯日掳豪嗅某诀战立琢渠胎吃薯膳绽父寇抿咋检芝着第三章数据类型运算符与表达式第三章数据类型运算符与表达式

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

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

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