《基本数据及其运算.ppt》由会员分享,可在线阅读,更多相关《基本数据及其运算.ppt(72页珍藏版)》请在三一办公上搜索。
1、1,第 2 章 基本数据及其运算,2.1 基本类型数据2.2 输入和输出基础2.3 数据运算2.4 表达式,2,2.1 基本类型数据,C语言中,基本数据有三种:整数:整数是不带小数点和指数符号的数据。浮点数:浮点数是带有小数点或指数符号的数值数据。字符:字符型数据表示一个字符,占用一个字节(8个二进制位)。,3,2.1.1 整型数据,按其数值范围大小划分成三种:1.基本型:用 int 标记2.短整型:用 short int 标记,简写为 short3.长整型:用 long int 标记,简写为 long 按值内部的最高位不同理解又有两类:1.带符号:存储单元最高位作为符号位2.不带符号:存储单
2、元中全部二进位用作存放数据本身,而没有符号位。表示方法:unsigned int、unsigned short、unsigned long,4,int i,j;/*定义带符号的整型变量*/unsigned short k;/*定义无符号短整型变量*/long m,n;/*定义带符号的长整型变量*/说明:不同版本占用字节数,例如,类型,版本,5,常用的整数表示的数值范围16位例,6,十进制整数:如 0,123,-45。八进制整数:以数字0开头,并由07组成的数字符序列。如:0123表示八进制整数,其值等于十进制整数为:1*82+2*81+3=83 十六进制整数:以0 x(或0X)开头,并由十六进
3、制数的数字符组成的数字符序列。表示十六进制数的数字符有 16 个:09 和 A、B、C、D、E、F,其中六个字母也可以小写。如:0 x123表示十六进制整数,其值等于十进制整数为:1*162+2*161+3=291;0 xabc,其值等于10*162+11*161+12=2748。,整型常量的书写形式,7,long 型整数:在整型常数后加字母 L 或 l,即为long 型整型常数。例如:0L、132L 等。不带符号的整型:在整型常数后加字母 U 或 u,即为 unsigned 型整型常数。例如:1U、122U 等。不带符号的 long 型整数:在整型常数后同时加上字母 U 和 L,表明该整型常
4、数是 unsigned long 型。例如 22UL、35LU 等。,长整型整数和无符号整数的表示,8,按数值范围大小和精度不同分成三种:1.单精度型:用 float 标记 如:float x,y;2.双精度型:用 double 标记 如:double result;3.长双精度实型:用 long double 标记 如:long double z;,2.1.2 浮点型数据,9,1.float 型 在内存中占用4个字节(32个二进位),约7个十进位有效数字,能表示绝对值约为10-381038。2.double 型 在内存中占用8个字节(64个二进位),约15个十进位有效数字,能表示绝对值约为1
5、0-308 10308。3.long double 型 long double型数据一般占用比double型数据更多的字节,但在VC中,也只占用8个字节。,2.1.2 浮点型数据(续),10,说明:(1)整数部分和小数部分可以任选,但不可同时没有。(2)小数点和指数部分不可以同时都没有。(3)指数部分是以一个字母e或E开头,后跟一个整数。例如:合法的浮点常数:7.、.457、1E5、1.5e-6 不正确的浮点常数:E4、.E5、4.0E,浮点数的一般书写格式 正负号 整数部分.小数部分 指数部分,11,(4)在浮点数后加f表示float;加L(或l)表示long double 型,在浮点数的最
6、后不加任何字母,C系统认为此数是 double 型。例如:1.5、1.5f、1.5L 分别表示 double型、float型和long double型,浮点数说明,12,(2)浮点数运算有一定的计算误差例如:要判别两个浮点型变量x和y是否相等正确:fabs(x-y)1e-6/x与y非常接近则认为相等 错误:x=y/x与y不可能完全相等,浮点数注意点,(1)接受的浮点数与书写会有一定的误差例如:float x=1.23456789;因x只能存储约7位有效数字,浮点数1.23456789所对应的二进制形式中,超出存储位数的那些位不会被存储。,13,字符型数据用于表示一个字符值。字符型数据的内部表示
7、是字符的ASCII代码(二进制形式)。字符型数据的类型符用char来标记。如:char c1,c2;字符型数据可看作是-128127或0255的一个小整数。,2.1.3 字符型数据,14,普通字符常量:用单引号括住的一个字符。例如:a、B、$【例2.1】字符型数据与整型数据通用的示例程序。#include void main()char c1,c2;/*定义两个字符型变量c1和c2*/c1=97;/*a的 ASCII 码值为 97*/c2=c1+1;/*字符型数据与整型数据混合运算*/printf(c1=%c,c1s ASCII code=%d n,c1,c1);printf(c2=%c,c2
8、s ASCII code=%d n,c2,c2);,字符型常量书写方法普通字符常量,c1=a,c1s ASCII code=97c2=b,c2s ASCII code=98,程序输出,15,转义字符常量:用字符或字符列来标记。例如:详见表21r:回车符,光标位置移到当前行首 n:换行符,光标位置移到下一行首t:制表符,使输出位置横向跳至下一个输出区开始列。0:字符串结束符 ddd:ddd为1至3个8进制数字。如12也能表示换行符n。,字符型常量书写方法转义字符常量,16,转义符 含 义a响铃b退格(Backspace键)n换行符,光标位置移到下一行首r回车符,光标位置移到当前行首t水平制表符(
9、Tab键)反斜杠符 单引号符 双引号符0字符串结束符dddddd为1至3个8进制数字如,12也能表示换行符nxhhhh为1至2个16进制数字如,x41也能表示大写字母A,表2-1 转义字符及其含义,17,字符串常量:用双引号括起来的一串字符。例如:I am a student.、China、a 普通字符与字符串的区别,字符型常量书写方法字符串常量,18,例如:char c=a正确 char c=”a”错误又如:字符串”China”机内表示:字符型数据可与整型数据混合运算 字符型数据以 ASCII 代码的二进制形式存储,与整数的存储形式相类似。因此,在程序中,字符型数据和整型数据之间可以通用,字
10、符型数据与整型数据可混合运算。,字符型与字符串常量的区别,19,2.2 输入和输出基础,2.2.1 单字符的输出和输入1.单个字符的输出函数格式:putchar(ch)功能:将一个字符输出到标准输出设备(通常指显 示器)上。说明:1.ch可以是字符型常量或变量,也可以是整型常量或变量。2.使用字符输入输出函数,在程序首必须书写#include,20,【例2.2】使用putchar()函数示例,#include void main()char ch=h;int i=i;putchar(67);/*输出字母C,对应的ASCII码值为67*/putchar(ch);/*输出字母h*/putchar(
11、i);/*输出字母i*/putchar(n);/*输出字母n*/putchar(141);/*输出字母a,对应的ASCII码值为141(八进制)*/putchar(n);/*换行*/,程序输出 China,21,2.单个字符输入函数,格式:getchar()功能:从标准输入设备上(通常为键盘)读入 一个字符。说明:1.该函数没有参数,它只能接受一个输入字符。2.getchar()得到的字符可以赋给一个字符变量或整型变量,也可以不赋给任何变量。例如:将输入的字符直接输出 putchar(getchar(),22,【例2.3】使用putchar()函数示例,#include void main()
12、char c;c=getchar();/*输入一个字符*/putchar(c);/*输出读入的字符*/putchar(n);/*换行*/若:程序运行时从键盘键入字符 Z 和Enter键则:程序输出 Z,23,2.2.2 格式输出和输入,1.格式输出函数格式:printf(格式控制字符串,输出项表)其中:(1)格式控制字符串是用双引号括起来的字符串,包含三类字符:普通字符:要求按原样输出的字符。转义字符:要求按转义字符的意义输出。如n表示输出时回车换行,b表示退格 格式转换说明:以“%”开头后加修饰符和格式符。常用的有%d、%f、%c、%s等。,24,2.2.2 格式输出和输入 printf函数
13、,(2)输出项表:每一个输出项可以是一个常量、变量或表达式等。例如:int a=3,b=5;printf(a=%d,b=%d,a+b=%dn,a,b,a+b);,输出结果:a=3,b=5,a+b=8,25,格式修饰符,%-+#w.ph/l/L输出格式符-左对齐标志,缺省时右对齐。+正数输出带正号。#对八进制数前加0;对十六进制数前加0 x;对浮点数总显示小数点。w 指定数据输出的宽度。若宽度为*,这时域宽大小由下一个输出项的整数值指出。例如:printf(%*c,10,*)则:等同与%10c,即先输出9个空格,再输出一个*。,26,格式修饰符(续),.p 对e、f格式,指定小数点之后输出的位数
14、,缺省时,p=6。对s格式,指定输出的字符数。h 输出的是短整型l 输出的是长整型L 输出的是long double型。,27,输出格式符,格式符 意 义 d或i以十进制输出整型 o 以八进制输出整型 x或X以十六进制输出整型 u 以无符号十进制输出整型 c输出一个字符 s 输出字符串 f 以小数形式输出单、双精度浮点数 e或E以指数形式输出单、双精度浮点数%输出一个字符%,28,格式输出函数例2.4,【例1】int i=1234;long j=1234567L;printf(%d,%+6d,%-6d,%ldn,i,i,i,j);将输出:1234,+1234,1234,1234567注意:对于
15、long型数据输出,在格式符前必须有长度修饰符l,表明输出long型数据。【例2】int k=045;long p=-1L;printf(%#o,%4o,%6lon,k,k,p);printf(%#x,%4x,%6lXn,k,k,p);将输出:045,45,37777777777(-1的补码)0 x25,25,FFFFFFFF,29,格式输出函数例(续),【例3】printf(%d,%4u,%lun,4294967295u,4294967295u,-1);将输出:-1,4294967295,4294967295(231-1)【例4】printf(%c,%-3c,%2cn,045,a,a);/*
16、八进制045对应的字符是%*/将输出:%,a,a【例5】printf(%f,%8.3f,%-7.2f,%.7fn,123.4567f,123.4567f,123.4567f,123.456789);将输出:123.456703,123.457,123.46,123.4567890,30,2.格式输入函数,格式:scanf(格式控制字符串,数据储存地址项表)其中:(1)格式控制字符串是用双引号括起来的字符串,包括2类字符:普通字符:要求用户必须按原样输入。格式转换说明:以”%”开头后加修饰符和格式符(2)数据存储地址项表,每一个地址项是一个变量的地址(在变量名前加地址运算符&),31,格式修饰符
17、,%*wh/l/L 输入格式符*星号(赋值抑制符),跳过一个输入数据项。W 指定输入数据的数字符个数。H输入short型整数。l输入long型整数。L 输入long double型整数。例如:int i,j,k;scanf(%d%d%d,为变量 i,j,k 输入数据。其中&i,&j,&k 分别表示变量 i,j,k 的存储地址。,32,输入格式符表,格式符 意 义 d或i以十进制形式输入整数 o以八进制形式输入整数 x以十六进制形式输入整数 u以十进制形式输入无符号整数 c输入字符数据 s输入字符串数据 f以小数形式输入浮点数 e以指数形式输入浮点数,33,格式输入函数说明,1.格式控制字符串之
18、后给出的是变量地址,而不是变量名(除非是指针)。例如:为整型变量 n 输入数据写成:scanf(%d,n)是不正确的应写成:scanf(%d,&n)2.在格式控制字符串中,如果有普通字符,则在输入数据时应输入与这些字符相同的字符。例如:scanf(%d,%d,&i,&j)正确输入:1,2错误输入:1 2,34,格式输入函数说明,3.在用%c格式入字符时,空白类字符和转义字符都作为有效字符输入。若要取输入的一串空白类字符之后的第一个非空白类字符,可采用格式%c。4.在输入数值数据和字符串时,遇以下情况,就认为该数据结束:遇空白类字符:空白符、制表符、换行符。已读入由宽度所指定的字符数:如%4d
19、多至 4 个数字符。对于输入数值数据,下一个字符不能构成正确的数据格式。,35,格式输入函数说明例,例:int i;char c;float x;scanf(%d%c%f,scanf(%3d%*4d%d,&i,&j)若输入字符为:123456 78则:变量i为123,j为78。其中数据 456 因赋值抑制符*的作用被跳过。,36,格式输入函数说明,5.s 格式用来输入字符串,输入的字符序列之后自动添加字符串结束标志符0(因此,存储输入字符序列的字符数组的长度必须比实际最长字符串的字符数多1)。6.请注意c格式符和s格式符的区别。例:char c100,s100;scanf(%4c,c);/*输
20、入4个字符*/输入:abcd结果:scanf(%4s,s);/*忽略前导空格*/输入:abcd结果:,37,格式输入函数说明,7.e、f 格式用来输入浮点数。如有格式修饰符l,则为double型变量地址;含有长度修饰说明L,则为long double型变量地址;否则为float型变量地址。例如:float x;double y;long double;scanf(%f%lf%Lf,38,格式输入函数例2.5,对下列输入,要让变量i和j值分别为12和234(1)scanf(%d,%d,正确的输入:12 0 234,39,2.3 数据运算,运算符的优先级 优先级用来标志运算符在表达式中的运算顺序。
21、优先级高的先运算,优先级低的后运算。如:x-y*z 相当于 x-(y*z)运算符的结合性 在优先级相同情况下,表达式的计算顺序由结合性来确定。大多数运算符的结合性是从左至右,只有单目、三目和赋值运算符的结合性是从右至左的。如:x=a+b-c;a=b=c=1.5;,40,2.3.1 赋值运算简单赋值运算,简单赋值形式:变量=表达式执行过程:(1)计算表达式,并将计算的值赋给变量;(2)如表达式类型与变量类型不一致,将表达式值的类型转换成变量的类型;(3)将表达式的值赋给变量。说明:赋值运算符的结合性是“自右至左”。例1:int k;double x;x=k=3.5;/k的值为3,x的值为3.0例
22、2:i=4+(j=7);/使j值为7,i值为11例3:i=(j=3)+(k=8);/使j值为3,k为8,i为11,41,2.3.1 赋值运算复合赋值运算,在赋值运算符“=”之前加上其他运算符,可构成复合运算符。复合运算符:+=、-=、*=、/=、%=、=、&=、=、|=例:x+=5.0 等价于 x=x+5.0(将“x+”移到“=”右侧)x*=u+v 等价于 x=x*(u+v)a+=a-=b+2 等价于 a=a+(a=a-(b+2),42,2.3.2 算术运算一般运算符,单目运算符:+(取正)、-(取负)双目运算符:+(加)、-(减)、*(乘)、/(除)、%(求余)说明:(1)两个整数相除结果为
23、整数,如:7/4=1(2)求余运算符(%):要求参与运算的两个分量均为整型数据,如 5%3=2。求余运算所得结果的符号与被除数的符号相同。如:-5%3=-2,5%-3=2。(3)加、减、乘、除和求余运算都是双目运算符,结合性都是从左至右的。取正(+)、取负(-)是单目运算符,结合性是从右至左,优先级高于+、-、*、/、%等双目运算符。,43,2.3.2 算术运算自增和自减运算符,+i前缀形式,表示在引用变量i之前,先使i加1,以加1后的i值为运算结果;-i前缀形式,表示在引用变量i之前,先使i减1,以减1后的i值为运算结果;i+后缀形式,表示在引用变量i之后,才使i加1,即以增1前的i值为运算
24、结果;i-后缀形式,表示在引用变量i之后,才使i减1,即以减1前的i值为运算结果。,44,自增/自减运算符例,例如:i=4;j=+i;/*i结果为5,j的结果为5*/i=4;j=i+;/*i结果为5,j的结果为4*/i=4;j=-i;/*i结果为3,j的结果为3*/i=4;j=i-;/*i结果为3,j的结果为4*/,45,+和-运算符只能用于变量,不能用于常量或表达式。如 4+或(i+j)+都是不合法的。+和-是带有副作用的运算符。不要在一个表达式中对同一变量多次使用这样的运算符。如i=4,表达式(i+)+(i+)的值是8不是9,表达式(+i)+(+i)的值是12不是11。如i=4,在prin
25、tf(%d%dn,i,i+)中,输出的结果可能是4 4(从左到右),也可能是5 4(从右到左)。,自增/自减运算符注意事项,46,关系运算和逻辑运算,关系运算符:、=、=、!=关系运算符用于对两个值进行关系比较,判定比较条件是否满足。在中,条件满足的值为1;条件不满足为 0。(1)优先级:、=高于=,!=如:表达式 x y=c y)=(c u+v 等价于 x(u+v)(3)关系运算符的结合方向是自左至右的如:i=1,j=2,k=3 则表达式 kji 的值为 0,47,关系运算和逻辑运算,逻辑运算符&(逻辑与)、|(逻辑或)、!(逻辑非)其中:运算符&和|是双目运算符,要求有两个运算分量;运算符
26、!是单目运算符,只要求一个运算分量。优先级:!、&、|说明:逻辑运算结果也是一个逻辑量,即真(用1表示)或假(用0表示)。判定一个运算分量的值为真或假时,以运算分量的值不等于零为真,值等于0 为假。,48,关系运算和逻辑运算(真值表),逻辑运算真值表 a b!a a&b a|b 非0非0 0 1 1 非0 0 0 0 1 0非0 1 0 1 0 0 1 0 0优先级:!(非)高 算术运算符 关系运算符&和|赋值运算符 低,49,关系运算和逻辑运算(例),例如:a b&x y 等价于:(a b)&(x y)a!=b|x!=y 等价于:(a!=b)|(x!=y)x=0|x y 等价于:(x=0)|
27、(x y)!a&b|x y&z y)&(zy),50,关系运算和逻辑运算(例),在算术、关系、逻辑混合运算的表达式中,不同位置上出现的运算分量,应区分哪些是算术运算分量、哪些是关系运算分量和哪些是逻辑运算分量。例 如:2 1&4&7 1)&4)&(7(3+(!0),1,1,1,4,0,0,51,关系运算和逻辑运算(说明),1.逻辑运算的分量也可以是字符型、指针型。以 0或非 0 判定它们的“假”或“真”。2.“逻辑与”和“逻辑或”运算符的性质:a&b,当 a 为 0 时,不管 b 为何值(不再 计算 b),结果为 0。a|b,当 a 为 1 时,不管 b 为何值(不再计算b),结果为 1。例1
28、:a=1,b=2,c=3,c=4,m=5,n=6(m=ab)&(n=cd)m=0,n=cd不计算,n仍为6,52,关系运算和逻辑运算(说明),例2:int a=1,b=1,c=1;计算+a|+b&+c,因+a非0,不再计算逻辑或右边表达式+b&+c。该表达式计算后,变量a的值变为2,而变量b和c的值不变,依旧为1。3.注意书写顺序:例 如:y/x 2 且 x!=0,应写成:x!=0&y/x 2 因为,当 x 为 0 时,不会计算 y/x。而写成:y/x 2&x!=0 是不正确的,因为当 x 为 0 时,不能计算 y/x。,53,关系运算和逻辑运算(示例),例:判别某一年是否闰年。闰年条件:每四
29、年一个闰年,但每100年少一个闰年,每400年又增加一个闰年。(year能被4整除,不能被100整除)或(year能被400整除)用逻辑表达式可描述闰年条件:(year%4=0&year%100!=0)|year%400=0可简化为:(year%4=0&year%100)|year%400=0,54,2.3.4 条件运算,形式:表达式1?表达式2:表达式3执行过程:(1)计算表达式1的值;(2)如果表达式1的值非0(真),则计算表达式2,并作为条件运算的结果(不计算表达式3);(3)如果表达式1的值为0(假),则计算表达式3,并作为条件运算的结果(不再计算表达式2)。例如:x y?x:y如果
30、x y 为真,则条件运算取x值,否则取y值。说明:条件运算符(?:)优先级高于赋值运算符,低 于逻辑运算符、关系运算符和算术运算符。,55,2.3.4 条件运算(结合性),条件运算符的结合性为“自右至左”。例 如:max=x y?x:y+1等价于:max=(x y)?x:(y+1)例 如:x y?x:u v?u:v等价于:x y?x:(u v?u:v)条件运算三个运算分量的数据类型可以各不相同。语言约定,类型低的向类型高的转换。如:i j?2:3.5当 i j 时,条件表达式的值为2.0;否则为3.5。,56,2.3.5 其他运算符 逗号运算,形式:表达式1,表达式2,表达式n执行过程:(1)
31、从左至右依次计算各个表达式;(2)最后一个表达式的值作为整个逗号表达式运算的结果。例如:x=(i=3,i*2)结果:使i等于3,x等于6。说明:1.逗号运算目的是将多个表达式“串连”起来,分别得到各表达式的值。2.逗号运算常用于for循环结构,用于给多个 变量赋初值。3.逗号运算符的优先级最低。,57,2.3.5 其他运算符sizeof 运算,形式:sizeof(类型名)或 sizeof 表达式 作用:给出运算对象在内存中所占用的字节数。例1:int x=1;float y=2;double z=4;printf(int=%d,float=%d,double=%d,sizeof x,sizeo
32、f(float),sizeof z);结果:int=4,float=4,double=8例2:int a=1,3,5,7,9;float b;printf(%d n,sizeof b);printf(%dn,sizeof a/sizeof(int);结果:4 5,58,2.3.5 其他运算符 位运算(只要求了解),位运算的运算分量只能是整型或字符型数据,位运算把运算对象看作是由二进位组成的位串信息,按位完成指定的运算,得到位串信息结果。位运算符:&(位与)|(位或)(位异或)(位反)说明:位反是单目运算符,其余均为 双目运算符。优先级:、&、|,59,位运算 位与运算(&),位与规则:0&0=
33、0 0&1=0 1&0=0 1&1=1即:同为 1 的位,结果为 1,否则结果为 0。例如:53&22的结果为200000000000110101(十进制53,八进制为65)&0000000000010110(十进制22,八进制为26)10100(十进制20,八进制为24)按位与运算典型用法:1.取一个位串的某几位 例如,截取x的最低7位:x&01772.保留变量某几位,其余位置0 例如,保留x最低6位:x=x&077,60,位运算位或运算(|),位与规则:0|0=0 0|1=1 1|0=1 1|1=1即:只要有1个是1的位,结果为1,否则为0。例如:53|22的结果为550000000000
34、110101(十进制53,八进制为65)|0000000000010110(十进制22,八进制为26)0000000000110111(十进制20,八进制为67)按位或运算典型用法:将一个位串的某几位置成1。例如:将变量x的最低4位设置为1,其余位不变:x=017|x,61,位运算位异或运算(),位与规则:0 0=0 0 1=1 1 0=1 1 1=0即:相应位的值相同的结果为0,不相同的结果为1。例如:53 22的结果为350000000000110101(十进制53,八进制为65)0000000000010110(十进制22,八进制为26)0000000000100011(十进制35,八进
35、制为43)按位异或运算典型用法:将一个位串某几位取反。例如:将变量x的最低4位取反,其余位不变:x=017 x,62,位运算位反运算(),位与规则:0=1 1=0 即:0取反结果为1,1取反为0。例如:53 的结果为-54 0000000000110101(十进制53,八进制为65)1111111111001010(十进制-54,八进制为177712)补码=反码+1反码=原码即:原码=(补码 1)=(1111111111001010 1)=1111111111001001=0000000000110110=54所以:补码1111111111001010 的十进制是-54,63,位运算移位运算,
36、将整型数据或字符型数据作为二进位的位串,整体向左或向右移动。(1)左移运算 x y x右移y位,每右移1位相当于除以2例如:12 2 结果为 3说明:移位运算符的优先级低于算术运算符,高于关系运算符。,64,2.4 表达式,表达式:由运算符和运算分量构成。表达式的值:按运算符的优先级和结合性的要求进行运算,最终得到的结果。2.4.1 表达式分类算术表达式。如,x+1.0/y-z%5关系表达式。如,x y+z逻辑表达式。如,x y&x y?x:y逗号表达式。如,x=1,y+,z+=2,65,表达式书写时注意,(1)在表达式中如果连续出现两个运算符,为避免二义性,中间最好加空格符。例如:表达式x+
37、y 到底是(x+)+y 还是 x+(+y)呢?(2)在表达式中,加圆括号可以强制改变运算符的优先级。例如:表达式(x+y)*z,使加法优先于乘法。(3)优先级用来说明表达式的计算顺序。即优先级高的先运算,优先级低的后运算,优先级相同时由结合性决定计算顺序。,66,表达式书写时注意,(4)结合性也是用来说明表达式的计算顺序。在优先级相同情况下,表达式的计算顺序由结合性来确定。结合性分成两类:大多数运算符的结合性是自左至右,只有单目运算符、三目运算符和赋值运算符的结合性是自右至左的。,67,2.4.2 表达式的类型转换,隐式类型转换规则 高 double float long unsigned 低
38、 int char,short 说明:1.横向向左箭头表示必定的转换。如,float型数据运行前必须先转换为double型。2.纵向的箭头表示,当运算对象为不同类型转换的方向。,68,强制类型转换,将一种类型的表达式值强制转换成另一种类型。一般格式:(类型名)表达式 或 类型名(表达式)例如:float x;unsigned short y;x=(int)5.8+3.3;/*强制类型转换,(int)5.8也可以写成int(5.8)*/y=-1;/*隐式类型转换,-1补码为全1 即216-1*/printf(x=%f,y=%dn,x,y);输出结果为:x=8.300000,y=65535 注意:
39、(int)(x+y)与(int)x+y 含义不一样,69,#include void main()int i=1,j=2,k=3;i+=j+=k;/*输出:i=6 j=5 k=3*/printf(i=%dtj=%dtk=%dn,i,j,k);printf(ij?i+:j+)=%dn,k+=ij?i+:j+);/*输出:(k+=ij?i+:j+)=9*/printf(i=%dtj=%dtk=%dn,i,j,k);/*输出:i=6 j=7 k=9*/,【例2.7】表达式求值例子1,70,i=3;j=k=4;printf(k=j=i)=%d,k=j=i);/*输出:(k=j=i)=0*/printf(t(k=j/*输出:k=1*/,【例2.7】表达式求值例子1,71,#include void main()int a,b,c;a=b=c=1;+a|+b/*输出:a=2 b=2 c=2*/,【例2.8】表达式求值例子2,72,a=b=c=1;-a,【例2.8】表达式求值例子2,