数据类型和表达式.pptx

上传人:莉*** 文档编号:77704061 上传时间:2023-03-16 格式:PPTX 页数:73 大小:364.97KB
返回 下载 相关 举报
数据类型和表达式.pptx_第1页
第1页 / 共73页
数据类型和表达式.pptx_第2页
第2页 / 共73页
点击查看更多>>
资源描述

《数据类型和表达式.pptx》由会员分享,可在线阅读,更多相关《数据类型和表达式.pptx(73页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、15.1 5.1 数据的存储格式数据的存储格式数据在计算机内存中都是以二进制形式存储的,但是不同类型的数据,其存储的格式不尽相同,包括:1.整型数据的存储格式2.实型数据的存储格式3.字符型数据的存储格式第1页/共73页25.1 5.1 数据的存储格式数据的存储格式整型数据的存储格式整型数据在内存中是以补码形式存储。整型数值可以采用原码、反码和补码不同的形式表示。正数的原码、反码和补码相同,符号位是0,其余各位表示数值,如数值8转换成二进制为1000,其内存中形式为:0000000000001000第2页/共73页35.1 5.1 数据的存储格式数据的存储格式整型数据的存储格式负数的原码、反码

2、和补码则不同:(1)原码:符号位是1,其余各位表示数值的绝对值。(2)反码:符号位是1,其余各位对原码取反。(3)补码:反码加1。-8的原码是:-8的反码是:-8的补码是:100000000000100011111111111101111111111111111000第3页/共73页45.1 5.1 数据的存储格式数据的存储格式整型数据的存储格式两个字节的存储单元能表示的最大正数是215-1,即32767,其补码形式为:两个字节的存储单元能表示的最小负数是-216,即-32768,其补码形式为:11111111111111110111111111111111第4页/共73页55.1 5.1 数

3、据的存储格式数据的存储格式整型数据的存储格式无符号整数用全部16位二进制位来表示数值大小。因此无符号整数能表示的最大整数为216-1,即65535:最小的整数为0:00000000000000001111111111111111第5页/共73页65.1 5.1 数据的存储格式数据的存储格式实型数据的存储格式实型数据一般占4个字节内存空间。按指数形式存储。例如实数3.14159首先需要转换成指数形式0.314159e+01,其在内存中的存储形式如下:实型数据的存储规律:1)小数部分占的位数愈多,数值的有效数字愈多,精度愈高。2)指数部分占的位数愈多,则能表示的数值范围愈大。+.3141591数符

4、小数部分指数第6页/共73页75.1 5.1 数据的存储格式数据的存储格式字符型数据的存储格式每个字符变量被分配一个字节的内存空间,存储的是字符的ASCII码(ASCII码见附录A)。例如,字符C的ASCII码是67,用二进制表示为1000011,在内存中以下列形式存储:0 01 10 00 00 00 01 11 1第7页/共73页85.2 5.2 基本数据类型基本数据类型类别名称类型说明符字节取值范围整型有符号整型signed int4-231231-1有符号短整型signed short int2-215215-1有符号长整型signed long int4-231231-1无符号整型u

5、nsigned int40232-1无符号短整型unsigned short int20216-1无符号长整型unsigned long int40232-1实型单精度实型float4约(10-381038)双精度实型double8约(10-30810308)字符型字符型char1028-1表5-1 基本数据类型第8页/共73页95.2.1 5.2.1 整型整型整型是指不存在小数部分的数据类型,可分为有符号类型(signed)和无符号类型(unsigned)。int类型是计算机所给出的整数的正常大小。由于16位整数的上限值为215-1,这会对许多应用产生限制,所以C语言还提供了长整型(long

6、)。而某些时候,为了节省空间,需要使用存储空间较小的数值,称之为短整型(short)。第9页/共73页105.2.1 5.2.1 整型整型整型常量整型常量就是整常数或整数,只要整型常量的数值不超过表5-1中类出的整型数据的取值范围,它就是合法的常量。C语言允许使用十进制、八进制和十六进制形式书写整型常量:1)十进制整数:由正、负号和阿拉伯数字09组成,但是首位数字不能是0。如:10。2)八进制整数:由正、负号和阿拉伯数字07组成,首位数字必须是0。如:010。3)十六进制整数:由正、负号和阿拉伯数字09、英文字符af或AF组成,首位数字前必须有前缀0 x或0X。如0 x10。第10页/共73页

7、115.2.1 5.2.1 整型整型整型常量当程序中出现整型常量时,如果它属于int类型的取值范围,那么编译器会把此常量作为普通整型来处理,否则作为长整型来处理。为了迫使编译器把常量作为长整型来处理,只需在数值后面加上一个字母L或l:-123L、0123L。而为了指明是无符号常量,可以在常量后面加上字母U或u:123U、0 x123U。注意:八进制和十六进制只是数值书写的另一种形式,它们不会对数值实际存储的方式产生影响(整数都是以二进制形式存储的,而不考虑实际书写的方式)。任何时候都可以从一种形式转换为另一种形式。第11页/共73页125.2.1 5.2.1 整型整型整型数据的输入与输出使用p

8、rintf和scanf函数。在计算机中一旦定义了整形变量的类型,其内存字节数和存储形式是确定的。但是必须注意对于同一个整数其常数的书写格式有多种(十进制、八进制、十六进制),且输入、输出的格式也有多种(%d、%u、%o、%x、等)第12页/共73页135.2.1 5.2.1 整型整型程序示例/*用%d、%o和%x输入输出整型数据*/#include void main(void)int a,b,c;printf(输入a,b,c,分别为八进制、十进制和十六进制:n);scanf(%o%d%x,&a,&b,&c);printf(%o,%d,%xn,a,a,a);printf(%o,%d,%xn,b

9、,b,b);printf(%o,%d,%xn,c,c,c);头文件头文件地址符地址符输出结果输出结果输入输入a a,b b,c c,分别为八进制、十进制和十六,分别为八进制、十进制和十六进制:进制:10 10 1010 10 101010,8 8,8 81212,1010,a a2020,1616,1010Press any key to continuePress any key to continue第13页/共73页145.2.2 5.2.2 实型实型实型数据分为:float:单精度实型double:双精度实型一般,单精度实型在内存中占4个字节,有效数字为6位;双精度实型占8个字节,有效

10、数字为15位。第14页/共73页155.2.2 5.2.2 实型实型实型常量在C语言中,实数只采用十进制表示形式,可以用浮点表示法和科学计数法表示。1)浮点表示法:实数由正号、负号、阿拉伯数字09和小数点组成,必须有小数点,并且小数点前、后至少一边要有数字。实数的浮点表示法又称实数的小数形式。如3.14、.123、10.0等。2)科学计数法:实数由正号、符号、阿拉伯数字09、小数点和字母e或E组成。e是指数的标志,在e之前要有数据,e之后的指数只能是整数。实数的科学计数法又称实数的指数形式。如0.314e1表示0.314101、0.314e-1表示0.31410-1。默认情况下,实型常量都是以

11、双精度的形式存储。第15页/共73页165.2.2 5.2.2 实型实型实型数据的输入和输出 用函数scanf和printf实现实型数据的输入和输出。输出实型数据时,单精度和双精度实型数据使用相同的格式控制说明;输入实型数据时,格式控制说明可以通用,但是,输入double型数据时,在格式控制说明中必须加限定字母l,否则输入变量将无法得到正确的输入数据。第16页/共73页175.2.2 5.2.2 实型实型程序示例/*使用基本格式说明符输入输出实型数据*/#include void main(void)float f;double d;scanf(%f,&f);scanf(%lf,&d);pri

12、ntf(%f,%en,f,f);printf(%6.3f,%6.2f,%.2fn,d,d,d);格式说明符格式说明符输出结果输出结果123.456 3.1415926123.456 3.1415926123.456001,1.234560e+002123.456001,1.234560e+002 3.142,3.14,3.14 3.142,3.14,3.14Press any key to continuePress any key to continue第17页/共73页185.2.3 5.2.3 字符型字符型每个字符数据在内存中占用一个字节,用于存储它对应的ASCII码值。所以C语言中的字

13、符具有数值特征,不但可以写成字符常量的形式,还可以用相应的ASCII码表示,即可以用整数来表示字符。例如:a的ASCII码值为97,A的ASCII码值为65,而空格 的ASCII码值为32。第18页/共73页195.2.3 5.2.3 字符型字符型字符型常量1)字符型常量指单个字符,用一对单引号及其括起来的字符来表示,如a,B,9,*,都是合法的字符常量。注意:1和1的区别,一个是数值1,一个字符1其对应的ASCII码值为49。第19页/共73页205.2.3 5.2.3 字符型字符型字符型常量2)转义字符是一种特殊的字符常量。转义字符以反斜线“”开头的字符序列。转义字符具有特定的含义,不同于

14、字符原有的意义,故称“转义”字符。转义字符转义字符的意义ASCII代码n回车换行10t横向跳到下一制表位置9b退格8r回车13f走纸换页12反斜线符92单引号符39”双引号符34a鸣铃7ddd13位八进制数所代表的字符xhh12位十六进制数所代表的字符第20页/共73页215.2.3 5.2.3 字符型字符型字符型数据的输入与输出字符的输入输出可以调用函数scanf、printf、getchar和putchar。在使用scanf和printf函数调用时,格式控制说明为%c。如:char ch1,ch2,ch3;scanf(“%c%c%c”,&ch1,&ch2,&ch3);printf(“%c%

15、c%c”,ch1,ch2,ch3);在输入多个字符时,这些字符之间不能有空格,由于空格本身也是字符,它作为输入字符看待。a b c则ch1=a,ch2=,ch3=b注意:字符输入时,不需要单引号。第21页/共73页225.2.3 5.2.3 字符型字符型字符型数据的输入与输出每次调用getchar函数时,它会读入一个字符,并返回这个字符。例如:ch=getchar();getchar函数也不会在读入数据时跳过空格字符。putchar函数用来输出单个字符,例如:putchar(ch);scanf和printf可以一次输入输出多个字符,而getchar和putchar一次则只能输入输出一个字符wh

16、ile(ch=getchar()!=n);这段程序用于输入多个字符,当碰到回车换行时结束,这也是getchar函数的最常用的方法。第22页/共73页235.2.3 5.2.3 字符型字符型程序示例/*输入一串字符,以回车作为结束符,统计输入字符的个数*/#include void main(void)char ch;int number=0;printf(输入一串字符,以回车结束:);while(ch=getchar()!=n)/*如果字符不是回车,数量加1*/number+;printf(“一共输入了%d个字符n,number);输出结果输出结果输入一串字符,以回车结束:输入一串字符,以回车

17、结束:abcd efgh ijkl mnabcd efgh ijkl mn一共输入了一共输入了1717个字符个字符Press any key to continuePress any key to continue第23页/共73页245.3 5.3 运算符与表达式运算符与表达式运算符是描述对数据进行特定运算的符号,如+、*等。表达式是由运算符和运算项(操作数)组成的有意义的运算式子,最简单的表达式是常量和变量,较为复杂的表达式是由多个运算符和运算项构成。C语言的运算符不仅具有不同的优先级,而且具有结合性。在表达式中,各操作数参与运算的先后顺序不仅要遵守运算符优先级别的规定,还要受运算符结合性

18、的制约,以便确定是自左向右进行运算还是自右向左进行运算。第24页/共73页255.3 5.3 运算符与表达式运算符与表达式运算符种类运算符结合方向优先级逻辑运算符!从右向左高低位运算符算术运算符+、-、+、-*、/、%(双目)从左向右+、-(双目)移位运算符关系运算符、=、!=位运算符&、|逻辑运算符&条件运算符|?:赋值运算符=、+=、-=、*=、/=、%=从右向左逗号运算符,第25页/共73页265.3.15.3.1 赋值表达式赋值表达式赋值运算符 C语言将赋值作为一种运算,赋值运算符=的左边必须是一个变量,作用是把一个表达式的值赋给一个变量。赋值运算符的优先级较低,仅比逗号运算符高,它的

19、结合方向是从右向左。例如:x=2+3等价于x=(2+3)x=y=1等价于x=(y=1)第26页/共73页275.3.15.3.1 赋值表达式赋值表达式赋值表达式 用赋值运算符将一个变量和一个表达式连接起来的式子成为赋值表达式。赋值表达式的简单形式为:变量=表达式;表达式可以是常量、变量或较为复杂的表达式,例如:i=5;j=i;k=i+5*j;第27页/共73页285.3.15.3.1 赋值表达式赋值表达式赋值表达式 如果表达式的类型与变量的类型不同,那么赋值运算符会把表达式的值转化为变量的类型在赋值,例如:int i;float f;f=3;/*f is 3.0*/f=3.14;/*f is

20、3.14*/i=f;/*i is 3 and f is 3.14*/在赋值表达式中,赋值运算符右侧的表达式也可以是一个赋值表达式,例如:x=(y=2);第28页/共73页295.3.15.3.1 赋值表达式赋值表达式复合赋值运算符 C语言提供了一种复合赋值运算符,其一般形式为:变量 复合赋值运算符 表达式;exp作为一个整体参与计算,如:x*=y+5,等价于x=x*(y+5),而不是x=x*y+5。复合赋值运算符运行过程+=x+=exp等价于x=x+(exp)-=x-=exp等价于x=x-(exp)*=x*=exp等价于x=x*(exp)/=x/=exp等价于x=x/(exp)%=x%=exp

21、等价于x=x%(exp)第29页/共73页305.3.25.3.2 算术表达式算术表达式算法运算符 算术运算符分为单目运算符和双目运算符,单目运算符只需要一个操作数,而双目运算符需要两个操作数。典型的单目运算符使用方法 j=-1;双目运算符与我们平时接触的数学算术运算基本相同 单目运算符双目运算符+单目正号运算符-单目负号运算符加法类乘法类+加法运算符-减法运算符*乘法运算符/除法运算符%取余运算符第30页/共73页315.3.25.3.2 算术表达式算术表达式算法运算符 运算符+、-和*,其两端的运算项的类型可以都是整数或者都是实数,也可以使两者混合。计算机处理的过程是,先将整形操作数转化成

22、实型 当两个操作数都是整数时,运算符/只保留整数部分作为运算结果。因此,1/2的值是0而不是0.5。运算符%是整数取余运算符,如10%3的值是1。第31页/共73页325.3.25.3.2 算术表达式算术表达式算术运算符的优先级和结合性 算法运算符中单目运算符+和-优先级最高,其次是*、/和%,最低是双目运算符+和-,这一点与数学中的习惯相同。当同一优先级的运算符出现是,计算顺序应该根据其结合性确定。单目运算符+和-的结合性是从右到左,而其他算术运算符的结合性都是从左到右。例如:-+i 等价于-(+i)i*j/k 等价于(i*j)/ki+j-k 等价于(i+j)-k第32页/共73页335.3

23、.25.3.2 算术表达式算术表达式算术表达式用算法运算符将操作数连接起来的符合C语言语法规则的式子称为算术表达式,操作数包括常量、变量和函数等表达式。例如求一元二次方程ax2+bx+c=0的根为:x=(-b+sqrt(b*b-4*a*c)/(2*a);第33页/共73页345.3.35.3.3 自增、自减运算符自增、自减运算符循环程序设计中,“自增”和“自减”是变量中最常用的两个操作 i=i+1;复合赋值运算符可以使得语句缩短一些i+=1;C语言允许+(自增)和-(自减)运算符将使这些语句更加简短,其作用与上述语句功能相同 i+;+i;第34页/共73页355.3.35.3.3 自增、自减运

24、算符自增、自减运算符自增、自减运算符的使用规则:1)+i的运算顺序是:先执行i=i+1,再将i的值作为表达式+i的值。2)i+的运算顺序是:先将i的值作为表达式i+的值,再执行i=i+1。自增和自减运算符只能用于变量,而不能用于常量和表达式。第35页/共73页365.3.35.3.3 自增、自减运算符自增、自减运算符优先级和结合性 自增和自减运算符的优先级与单目+和-相同,高于算术运算符和赋值运算符。在i=5;k=i+;中,先计算表达式i+。根据自增运算符运算顺序,取i的值作为整个表达式的值,因此k的值是5。之后在执行i=i+1。负号运算符和自增运算符的优先级相同,按照结合方向来决定计算的次序

25、 -i+等价于-(i+),变量i先和+结合,再同-结合。第36页/共73页375.3.35.3.3 自增、自减运算符自增、自减运算符复杂的应用 思考下面的语句,i、j和k的值分别是多少?i=1;j=2;k=+i+j+;根据运算符的优先级,最后一句可表示为:k=(+i)+(j+),即i在使用前进行自增,而j在使用后自增,所以其等价于:i=i+1;k=i+j;j=j+1;第37页/共73页385.3.45.3.4 关系表达式关系表达式关系运算符 C语言的关系运算符和数学中的,运算符相对应,都是双目运算符,用于对两个操作数进行比较。只是前者在C语言的表达式中产生的结果是1(真)和0(假)。例如,表达

26、式56的值是1,而表达式65的值0。运算符含义优先级大于=大于或等于=等于低!=不等于第38页/共73页395.3.45.3.4 关系表达式关系表达式关系运算符的优先级和结合性 关系运算符的优先级低于算术运算符,高于赋值运算符。例如:i+jk-1等价于(i+j)c等价于d=(a+b)c)。在所有的关系运算符中,=的优先级又高于=和!=。例如:ij=jk等价于(ij)=(jk)。第39页/共73页405.3.45.3.4 关系表达式关系表达式关系运算符的优先级和结合性 关系运算符的结合方向是从左向右。例如:x=3=5等价于(x=3)=5。需要注意的是:ijk在C语言中是合法的,但是它不是所期望的

27、数学中的i小于j而j又小于k。因为运算符是左结合的,所以这个表达式等价于:(ij)k第40页/共73页415.3.45.3.4 关系表达式关系表达式关系表达式 用关系运算符将两个操作数连接起来的式子,称为关系表达式。关系表达式的值反映了关系运算的结果,它是一个逻辑量,取值为“真”或者“假”。在C语言中,就用整数1代表逻辑量“真”,0代表逻辑量“假”。也就是说,关系表达式的结果只能是1或0,类型为整型,其代表的含义是表达式为真或假。第41页/共73页425.3.45.3.4 关系表达式关系表达式关系表达式 /*关系运算符示例*/#include void main(void)char c=k;i

28、nt i=1,j=2,k=3;float x=1000,y=0.85;printf(%3d,a+5=k+1);printf(%3d,1 j 5);printf(%3d,x-5.25 0)为了得到表达式的值,首先必须计算表达式(i!=0)的值,如果i不等于0,那么需要计算表达式(j/i0)的值,从而确定整个表达式的值是真还是假。但是如果i等于0,那么整个表达式的值一定为假,所以就不需要计算法表达式(j/i0)的值了。第45页/共73页465.3.55.3.5 逻辑表达式逻辑表达式逻辑运算符的优先级和结合性 在逻辑运算符中,逻辑非!的优先级最高,逻辑与&次之,逻辑或|最低。例如:a|b&c等价于a

29、|(b&c)!a&b等价于(!a)&b!a=2等价于(!a)=2逻辑与&和逻辑或|的结合性都是左结合,逻辑非的结合性为右结合。例如:a&b&c等价于(a&b)&ca|b|c等价于(a|b)|c!a等价于!(!a)第46页/共73页475.3.55.3.5 逻辑表达式逻辑表达式逻辑表达式 用逻辑运算符将关系表达式或逻辑量连接起来的式子,称之为逻辑表达式。逻辑运算对象的值为“真”或“假”的逻辑量,它可以是任何类型的数据,C语言中以非0和0判定逻辑量为真或假。【例5-5】输入一个年份,判断该年份是否是闰年?题目分析:要想判读一个年份是否为闰年,首先需要知道闰年的含义。一个年份为闰年需要满足以下两个条

30、件之一:(1)年份能被4整除,但不能被100整除;(2)年份能被400整除。第47页/共73页485.3.55.3.5 逻辑表达式逻辑表达式逻辑表达式 从这两个条件中我们可以构造出判断闰年的逻辑表达式。设year为待判断年份,第一个条件可表示为(year%4=0)&(year%100!=0),第二个条件可表示为(year%400=0)。由于两个条件满足其一即可,是或的关系,所以最终的闰年判断条件是:(year%4=0)&(year%100!=0)|(year%400=0)#include stdio.hvoid main(void)int year;printf(输入一个年份:);scanf(

31、%d,&year);if(year%4=0)&(year%100!=0)|(year%400=0)printf(该年份是闰年n);elseprintf(该年份不是闰年n);输出结果输出结果输入一个年份:输入一个年份:20002000该年份是闰年该年份是闰年Press any key to continuePress any key to continue第48页/共73页495.3.65.3.6 条件表达式条件表达式条件运算符和条件表达式 条件运算符是C语言中唯一的一个三目运算符,它将3个表达式连接在一起,组成条件表达式。条件表达式的一般形式是:表达式1?表达式2:表达式3;条件表达式的运算过

32、程是:先计算表达式1的值,如果它的值为非0(真),将表达式2的值作为条件表达式的值,否则,将表达式3的值作为条件表达式的值。例如:(ab)?a:b;其含义为:如果a大于b,则整个表达式的值为a的值,如果a不大于b,则整个表达式的值为b的值。第49页/共73页505.3.65.3.6 条件表达式条件表达式条件运算符的优先级和结合性 条件运算符的优先级较低,仅高于赋值运算符和逗号运算符,低于关系运算符和算术运算符。条件运算符的结合方向是自右向左。例如:max=(ab)?a:b);其作用是将a和b中的最大值赋给max,可以写为max=ab?a:b。再如:ab?a:cd?c:d等价于ab?a:(cd?

33、c:d),该条件表示中的表达式3本身又是一个条件表达式。第50页/共73页515.3.65.3.6 条件表达式条件表达式条件运算符的优先级和结合性 在使用条件表达式时,需要注意条件运算符?和:是一个整体运算符,不能分开单独使用。条件表达式不能写作:(ab)?printf(max=a):;第51页/共73页525.3.65.3.6 条件表达式条件表达式条件运算符的优先级和结合性【例5-7】输入一串字符,将其中的字母字符大小写互换,输出互换后的字符串,要求用条件表达式实现。/*输入一串字符,将字母字符大小写互换,输出互换后的字符串,用条件表达式实现。*/#include stdio.hvoid m

34、ain(void)char ch;ch=getchar();while(ch!=n)ch=(ch=a&ch=A&ch=Z)?(ch-A+a):ch);putchar(ch);ch=getchar();第52页/共73页535.3.75.3.7 逗号表达式逗号表达式逗号运算符和逗号表达式 在C语言中,逗号既可以作为分隔符,又可以作为运算符。逗号作为分隔符使用时,用于间隔说明语句中的变量或函数中的参数,例如:int a,b,c;printf(%d,%d,x,y);逗号作为运算符使用时,将若干个独立的表达式连接在一起,组成逗号表达式。逗号表达式的一般形式是:表达式1,表达式2,表达式n运算过程为:先

35、计算表达式1的值,然后计算表达式2的值,一直计算到表达式n的值,将表达式n的值作为逗号表达式的值,将表达式n的类型作为逗号表达式的类型。第53页/共73页545.3.75.3.7 逗号表达式逗号表达式逗号运算符和逗号表达式 例如,设i,j和k都是整型,计算逗号表达式(i=1),(j=2),(k=i+j);该表达式由3个独立的表达式通过逗号运算符连接而成,从左到右一次计算这3个表达式,该逗号表达式的值和类型由最后一个表达式k=i+j决定,其值是3,类型是整型。第54页/共73页555.3.75.3.7 逗号表达式逗号表达式逗号运算符的优先级和结合性 逗号运算符的优先级是所有运算符中最低的一个,它

36、的结合性是从左到右,所以上面的逗号表达式等价于i=1,j=2,k=i+j。第55页/共73页565.3.75.3.7 逗号表达式逗号表达式典型应用 逗号表达式最常用的使用方法是在for循环语言中的表达式1和表达式3。由于for循环语句中要求只能有3个表达式,那么当需要初始化的数据不只一项时,可以使用逗号表达式简化程序书写。例如:sum=0;for(i=1;i=n;i+)sum+=1;可以改写为:for(sum=0,i=1;i 右移从左向右(右移)和b表示将a的二进制值右移b位,ab表达将a的二进制值左移b位。要求a和b都是整数,b只能为正数,且不能超过机器字所表示的二进制位数。通常实现中,左移

37、位运算后右端出现空位补0,移出左端之外的位舍弃;右移运算与操作数的数据类型是否带有符号位有关,不带符号位的操作数右移位时,左端出现的空位补0,移出右端之外的位舍弃,带有符号位的操作数右移位时,左端出现的空位按符号位复制,移出右端之外的位舍弃。第61页/共73页625.3.85.3.8 位运算位运算移位运算符 例如,整型x=8=00000000 00001000 x=x2,结果为x=2=00000000 00000010右端舍弃了00,左端补上00。在数据可表达的范围里,一般左移一位相当于乘2,右移一位相当于除2。又如:整型x=-10=11111111 11110110 x=x2,结果为x=-3

38、=11111111 11111101 右端舍弃了10,左端补上11。需要注意的是:操作数的移位运算并不改变操作数的值,只有通过赋值才能改变操作数的值,即x2时,x的值没有发生变化,只有x=x2时x的值才改变。第62页/共73页635.3.85.3.8 位运算位运算移位运算符【例5-9】将整型变量a中高字节和低字节中的内容对调。/*将整型变量a中高字节和低字节中的内容对调。*/#include stdio.hvoid main(void)int a=0 x1122,b,c;printf(a=0 x%xn,a);/*用16进制形式输出a的值*/b=(a&0 xff)8;/*低字节清0,高字节右移8

39、位到低字节,存入变量c*/a=b|c;/*实现高字节和低字节的对调*/printf(对调后:0 x%xn,a);输出结果输出结果a=0 x1122a=0 x1122对调后:对调后:0 x22110 x2211Press any key to continuePress any key to continue第63页/共73页645.3.95.3.9 其他运算符其他运算符长度运算符 长度运算符sizeof是一个单目运算符,用来返回变量或数据类型的字节长度。如,设i是整型数据,则sizeof(i)的值为4。而sizeof(int)是获得整型数据的字节长度,一般值为4,sizeof(double),

40、值为8。第64页/共73页655.3.95.3.9 其他运算符其他运算符特殊运算符 C语言中还有一些比较特殊的、具有专门用途的运算符。例如:1)()括号:用来改变运算顺序。2)下标:用来表示数组元素。3)*和&:与指针运算相关。4)和:用来表示结构分量。第65页/共73页665.45.4 类型转换类型转换C语言允许在表达式中混合使用基本数据类型,计算机在运算表达式时,通常要求各个操作数有相同的存储方式。也就是说计算机可以直接将两个16位整数相加,但是不能直接将16位整数和32位整数相加,也不能直接将32位整数和32位浮点数相加。因此,对表达式运算之前,需要将操作数转换为同一数据类型,这就是C语

41、言中的类型转换。类型转换分为自动类型转换和强制类型转换,而自动类型转换又分为非赋值类型转换和赋值类型转换。第66页/共73页675.4.15.4.1 非赋值类型转换非赋值类型转换在运算时,系统先按各个运算符的优先级确定运算步骤。在进行每一步运算之前,都要把不同类型的运算对象转换成同一类型,即将“较低类型”转换为“较高类型”后,再进行运算,运算结果是“较高类型”的数据。doublefloatunsigned longlongunsignedunsigned shortintchar,short高低第67页/共73页685.4.15.4.1 非赋值类型转换非赋值类型转换1)水平方向的转换:所有的c

42、har型和short型自动地转换成int型,所有的unsigned short型自动地转换成unsigned型,所有的long型自动地转换成unsigned long,所有的float型自动地转换成double型。2)垂直方向的转换:经过水平方向的转换后,如果参加运算的数据类型仍然不同,将这些数据自动地转换成级别最高的数据类型。第68页/共73页695.4.15.4.1 非赋值类型转换非赋值类型转换char c;short int s;int i;unsigned u;long l;unsigned long ul;float f;double d;i=i+c;/*c被转换为int*/i=i+

43、s;/*s被转换为int*/u=u+i;/*i被转换为unsigned int*/l=l+u;/*u被转换为long*/ul=ul+l;/*l被转换为unsigned long*/f=f+i;/*i被转换为float*/d=d+f;/*f被转换为double*/第69页/共73页705.4.25.4.2 赋值类型转换赋值类型转换赋值运算时,将赋值号右侧表达式的类型自动转换成赋值号左侧变量的类型。例如,变量a的类型是float型,计算表达式a=1时,先将整型常量1转换为float型常量1.0,然后赋值给a,结果是float型。如果赋值号右侧表达式的类型比赋值号左侧变量的类型级别高,运算精度会降低

44、。例如,设变量i的类型是int型,运算表达式i=3.14时,先将double型常量3.14转换成int型常量3,然后再赋值给i,结果是int型。如果赋值号右侧取值在左侧变量的类型范围之外,那么将会得到无意义的结果。例如,变量c的类型是char型,计算表达是c=10000 第70页/共73页715.4.35.4.3 强制类型转换强制类型转换虽然C语言的自动类型转换使用起来非常方便,但是有些是会需要更大程度的控制类型转换。基于这种原因,C语言提供了强制类型转换。其一般形式为:(类型名)表达式;例如:double a,b;b=a-(int)a;无论是自动类型转换,还是强制类型转换,都是为了本次运算的

45、需要,对数据的类型进行临时转换,并没有改变数据的内容。如(double)sum的类型是double型,但sum的类型并没有改变,仍然是int型。第71页/共73页725.5 小结小结1)数据类型,C语言提供的数据类型非常丰富,主要介绍了3种基本数据类型,整型、实型和字符型,包括其内存中存储格式、常量表示和输入输出操作等。2)运算符与表达式,介绍了C语言中常用的运算符及由运算符和操作数构成的相应表达式,包括运算符的优先级、结合性及使用方法和注意事项。3)类型转换,C语言中类型转换包括自动类型转换和强制类型转换,而自动类型转换又分为非赋值类型转换和赋值类型转换。第72页/共73页73感谢您的观看。第73页/共73页

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

当前位置:首页 > 应用文书 > PPT文档

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁