收藏 分销(赏)

第二章数据类型、运算符与表达式.ppt

上传人:xrp****65 文档编号:13189960 上传时间:2026-02-01 格式:PPT 页数:89 大小:2.99MB 下载积分:10 金币
下载 相关 举报
第二章数据类型、运算符与表达式.ppt_第1页
第1页 / 共89页
第二章数据类型、运算符与表达式.ppt_第2页
第2页 / 共89页


点击查看更多>>
资源描述
单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,单击此处编辑母版标题样式,第二章 数据类型、运算符与表达式,(9FDA.4B)16=(_)8,上节课问题回顾,0000 0,0001 1,0010 2,0011 3,0100 4,0101 5,0110 6,0111 7,1000 8,1001 9,1010 A,1011 B,1100 C,1101 D,1110 E,1111 F,000 0,001 1,010 2,011 3,100 4,101 5,110 6,111 7,十六进制数:,9,F,D,A,.,4,B,1,001,二进制数:,111,1,11,01,.,010,0,10,11,1,010,八进制数:,1,1,7,7,3,2,.,2,2,6,117732.226,(256)7=(_)6,上节课问题回顾,139,6,23,6,3,6,0,3 5 1,余,1,余,5,余,3,351,最终目的是:用,C,语言编写,程序,来解决实际问题!,数据类型、运算符与表达式,理由,1,:因为,C,语言流行,.,理由,2,:因为,C,语言考研时必考。,理由,3:,因为,C,语言在各种程序考试中首当其中。,理由,4,:因为它是必修课,是老师逼的,不学不能拿学分,理由,n,:,为什么我们要学习,C,语言呢?,数据类型、运算符与表达式,沃思公式,程序是解决某种问题的一组指令的有序集合,。,对数据的描述,对操作的描述,程序,数据,结构,算法,结论:学好,C,语言首先就必须十,分了解,C,语言的数据类型、,与运算符与表达式。,掌握变量和常量的概念;,理解各种类型的数据在内存中的存放形式;,掌握各种类型数据的常量的使用方法;,掌握各种整型、浮点型、字符型变量的定义和引用方法;,掌握数据类型转换的规则以及强制数据类型转换的方法;,掌握算术运算符、赋值运算符、逗号运算符的使用方法;,理解运算符的优先级和结合性的概念,记住所学的各种运算符的优先级关系和结合性。,学习目的,数据类型、运算符与表达式,变量,与常量,整型数据,C,语言的,数据类型,浮点型数据,数据类型、运算符与表达式,学习内容,字符型数据,简单数据类型与表示范围,C,语言的运算符与表达式,算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,强制类型转换运算符,C,数,据,类,型,构造类型,指针类型,空类型,void,定义类型,typedef,枚举类型,enum,数组,结构体,struct,共用体,union,基本类型,字符类型,char,浮点型,单精度型,float,双精度型,double,整 型,短整型,short,长整型,long,整型,int,数据类型决定:,1.,数据占内存字节数,2.,数据取值范围,3.,其上可进行的操作,本章所介绍的数据类型,C,语言的数据类型,变量,与常量,整型数据,C,语言的,数据类型,浮点型数据,数据类型、运算符与表达式,学习内容,字符型数据,算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,强制类型转换运算符,变量与常量,格式:,#define,符号常量 常量,例:,#define NUM 20,#define PI 3.1415926,常量:,程序运行时其值不能改变的量(即常数),常,量,的,分,类,直接常量,(,值常量,),整型常量,:,10,、,15,、,-10,、,-30,实型常量:,12.5,、,30.0,、,-1.5,字符常量,:,A,、,b,、,c,字符串常量,:,“sum”,、“,A”,、“,123”,符号常量,:,用标识符来代表常量。,运行结果:,total=300,行尾不能有分号,define,前面一定要有,#,符号常量名最好使用大写,符号常量名最好有意义,#include ,#define PRICE 30,void main(),int num,total;,num=10;,total=num*,PRICE,;,printf(total=%d,total);,变量与常量,/*This is the second C program*/,#include ,void main(),int x,y,z;,scanf(%d%d,z=x+y;,printf(sum is%dn,z);,数据类型名,定义的变量名,以“,”,分隔,变量与常量,格式:,数据类型 变量名,1,,变量名,2,,,,变量名,n,;,int x,y,z;,float radius,length,area;,char ch;,决定分配字节数,和数的表示范围,合法标识符,变量:,程序运行时其值可以被改变的量,变量的两要素:,变量名、变量值,变量与常量,如何衡量变量所占空间大小?,bit,,中文叫法:位,Byte,,中文叫法:字节,Kilobyte(KB),,中文叫法:,K,Megabyte(MB),,中文叫法:兆,Gigabyte(GB),,中文叫法:,G,Terabyte(TB),,中文叫法:,T,1 TB,=,1,024 GB,1 GB,=,1,024 MB,1 MB,=,1,024 KB,1 KB,=,1,024 B,1 B,=,8 b,变量与常量,一个位有多大?,只能是“,0”,或者“,1”,,二进制,一个字节有多大?,可以表示数字,0255,之间的整数,保存一个字符(英文字母、数字、符号),ASCII,(美国标准信息交换码)编码,见,附录,A,变量与常量,变量的初始化:,定义时赋初始值,例,:,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;,(,),编译程序根据变量定义为其,分配指定字节的内存单元,地址,sh,ort int a=1,b=-3,c;,a,b,c,2,字节,2,字节,2,字节,地址,地址,内存,.,.,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;,a=1;,float data;,data=(a+b)*1.2;,printf(“data=%fn”,data);,void main(),int a,b=2;,float data;,a=1;,data=(a+b)*1.2;,printf(“data=%fn”,data);,变量定义,可执行语句,变量定义位置:,一般放在函数开头,变量与常量,变量,与常量,整型数据,C,语言的,数据类型,浮点型数据,数据类型、运算符与表达式,学习内容,字符型数据,算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,强制类型转换运算符,整型数据,整型常量,十进制整数:由数字,0,9,和正负号表示,最高位非零,.,如,:123,-456,八进制整数:由数字,0,开头,后跟数字,0,7,表示,.,如,:0123,011,十六进制整数:由,0 x,或,0X,开头,后跟,0,9,a,f,A,F,表示,.,如,0 x123,0Xff,定义整数的符号常量,#define NUM1 20 /,十进制数,20,#define NUM2 020 /,八进制数(十进制,16,),#define NUM3 0 x2a /,十六进制数(十进制,42,),思考题:下列整型常量哪些是非法的?,012,,,oX7A,,,0,,,078,,,0 x5Ac,,,-0 xFFFF,,,0034,,,7B,。,首字符不能是字母,o,八进制数中不能有数字,8,十进制数中不能有字母,B,正数,N,的补码,N,补,与原码,N,原,和反码,N,反,相同。,对于负数,N,,其补码,N,补,的的符号为,1,,数值部分为,反码数值加,1,。,在补码表示法中,,0,的表示形式是唯一的,即:,0,补,0000,或,0.000,0,补,0000,或,0.000,整型数据,整数在内存中的表示,整数的数值在内存中用补码的形式存放。,将上述求得的补码的低位存放于内存单元之中,就得到了该整数在内存中的表示,内存单元的最高位是符号位(,0,表示正,,1,表示负)。,整型数据,整数在内存中的表示,在,TC3.0,下,一个整数默认情况下需要,2,个字节(,16,位)的内存单元存放;而在,VC6.0,下,则需要,4,个字节(,32,位)。,例:十进制整数,+14,(对于,16,位的内存单元),符号位,(,表示正,),00001110,0,0000000,低字节,高字节,低地址,高地址,符号位,(+14),补,=,0,000 0000 0000 1110,整型数据,符号位,(,表示正,),低字节,高字节,低地址,高地址,(+14),补,=,0,000 0000 0000 0000 0000 0000 0000 1110,00001110,00000000,00000000,0,0000000,符号位,例:十进制整数,+14,(对于,32,位的内存单元),整型数据,符号位,(,表示负,),11110010,1,1111111,低字节,高字节,低地址,高地址,符号位,(+14),补,=,0,000 0000 0000 1110,(-14),补,=,1,111 1111 1111 0010,按位求反,末位加,1,例:十进制整数,-14,(对于,16,位的内存单元),整型数据,符号位,(,表示负,),低字节,高字节,低地址,高地址,(+14),补,=,0,000 0000 0000 0000 0000 0000 0000 1110,11110010,11111111,11111111,1,1111111,符号位,(-14),补,=,1,111 1111 1111 1111 1111 1111 1111 0010,按位求反,末位加,1,例:十进制整数,-14,(对于,32,位的内存单元),整型数据,符号位,(,表示负,),(+65537),补,=,0,1 0000 0000 0000 0001,(-65537),补,=,1,0 1111 1111 1111 1111,按位求反,末位加,1,11111111,1,1111111,低地址,高地址,低字节,高字节,符号位,取低,16,位,真值为:,-1,不是,-65537!,例:十进制整数,-65537,(对于,16,位的内存单元),整型数据,符号位,(,表示负,),低字节,高字节,低地址,高地址,(+65537),补,=,0,000 0000 0000 0001 0000 0000 0000 0001,11111111,11111111,11111110,1,1111111,符号位,表示负,(-65537),补,=,1,111 1111 1111 1110 1111 1111 1111 1111,按位求反,末位加,1,真值为:,-65537!,例:十进制整数,-65537,(对于,32,位的内存单元),为什么,-65537,这个数在,16,位内存单元中的表示与在,32,位内存单元中的表示不相同呢?,这主要是因为,-65537,这个数超出了,16,位内存单元表示数的范围,,所以实际存储的值(,-1,)与要表示的值(,-65537,)不同,但,-65537,并没有超出了,32,位内存单元表示数的范围,所以实际存储的值就是其本身。因此,我们在,C,语言中对数据处理时必须要注意数据的表示范围,以免引起不必要的错误。,整型数据,例 补码:,1,1111001,取反:,1,0000110,加,1,:,1,0000111=-7,负数补码转换成十进制数:最高位不动,其余位取反加,1,整型数据,考虑补码:,1000000000000000,、,1111111111111111,的十进制数,负数补码转换成十进制数:最高位不动,其余位取反,得到,十进制数减,1,整型数据,整型变量,定义:,i,nt,变量名,,变量名,2,,,,变量名,n,;,int,必须小写,至少一个空格,必须为合法的标识符,以逗号,分隔,以分号,;,结尾,定义时可以赋初值,方法:在变量名后面增加,“,=,数值,”,例:,int a;,int x,y,z;,int m=2,y=-3;,当程序中定义了一个变量时,计算机会为这个变量分配一个相应大小的内存单元。因此,这个变量是有值的,它的值就是对应内存单元的值。如果定义时没有赋初值,则这个值程序员是无法预知的。,整型数据,整型变量的分类,控制变量是否有符号:,signed,(有符号)和,unsigned,(无符号),控制整型变量的值域范围:,short,(短)和,long,(长)。,在,int,前可以根据需要可加上修饰符,6,种,整,型,变,量,有符号基本整型,无符号基本整型,有符号短整型,无符号短整型,有符号长整型,无符号长整型,signed int,unsigned int,signed short int,unsigned short int,signed long int,unsigned long int,整型数据,11111110,1,1111111,低地址,高地址,低字节,高字节,符号位,变量,a,占用的内存单元,(2,字节,),unsigned int a=-2;,/,定义一个无符号整型变量,a,,并赋初值,-2,占用的内存单元字节数同,int,类型。,无符号基本型(,unsigned int,),数据位,有符号基本型(,int,),int a=-2;,/,定义一个有符号整型变量,a,,并赋初值,-2,TC,下,变量占,2,个字节(,16,位)的内存单元;,VC6.0,下,变量占,4,个字节(,32,位)的内存单元。,其值为:,65534!,整型数据,有符号短整型(,short int,或,short,),short int a=2;,/,定义一个有符号短整型变量,a,,并赋初值,2,或,short a=2;,占用的内存单元为,2,个字节,无论是,TC,还是,VC,。,无符号短整型(,unsigned short int,或,unsigned short,),unsigned short int a=2;,/,定义一个无符号短整型变量,a,,并赋初值,2,或,unsigned short a=2;,占用的内存单元字节数同,short,类型。,整型数据,有符号长整型(,long int,或,long,),long int a=234567;,/,定义一个有符号长整型变量,a,,并赋初值,234567,或,long a=234567;,占用的内存单元为,4,个字节,无论是,TC,还是,VC,。,无符号长整型(,unsigned long int,或,unsigned long,),unsigned long int a=2;,/,定义一个无符号长整型变量,a,,并赋初值,2,或,unsigned long a=2;,占用的内存单元字节数同,long,类型。,整型数据,例 各种整型变量的定义,#include ,#define SUM 65535,void main(),int a,b=20,;,unsigned int c=0 xff;,long D;,a=SUM;,D=301;,printf(a=%dn,a),;,printf(b=%dn,b),;,printf(c=%dn,c),;,printf(“D=%dn”,D),;,/,文件包含,头文件说明,/,定义符号常量,SUM,,值为,65535,/,定义两个,int,型变量,a,和,b,,,b,赋初值,20,/,定义无符号整型变量,c,,并赋初值,0 xff,/,定义长整型变量,D,/,对,a,赋值为,SUM,,这时,a,的值是,65535,/,对,D,赋值为,301,/,以有符号十进制形式(,%d,)显示,a,的值,/,以有符号十进制形式(“,%d”,)显示,b,的值,/,以有符号十进制形式(,%d,)显示,c,的值,/,以有符号十进制形式(,%d,)显示,D,的值,变量定义部分,语句执行部分,在,TC3.0,下运行结果:,a=-1,b=20,c=255,D=301,在,VC6.0,下运行结果:,a=65535,b=20,c=255,D=301,对于,16,位的有符号整型变量,a,来说,因,65535,在内存中的形式为,1,111111111111111,,最高位为,1,表示负,则其所对应的十进制数就为,-1,。,整型数据,6,种,整,型,变,量,有符号基本整型,无符号基本整型,有符号短整型,无符号短整型,有符号长整型,无符号长整型,signed int,unsigned int,signed short int,unsigned short int,signed long int,unsigned long int,问题,整型常量是否也有这些分类?,将整型常量赋值给各种类别的整型变量时如何,做到类型匹配?,如果整型常量的值位于,-32768,32767,之间,,C,语言认为它是,int,型常,量,它可以赋值给,int,型和,long int,型变量;,如果整型常量的值位于,-2147483648,2147483647,之间,,C,语言认为它,是,long,型常量,它可以赋值给,long int,型变量。,short int,与,int,型数据在内存中占据的长度相同,因此可以相互赋值。,整型常量后加字母,l,或,L,,认为它是,long int,型常量。比如,123L,、,45l,、,0XAFL,。,无符号数也可用后缀表示,整型常数的无符号数的后缀为,U,或,u,。例,如:,358u,,,0 x38Au,,,235Lu,均为无符号数。,变量,与常量,整型数据,C,语言的,数据类型,浮点型数据,数据类型、运算符与表达式,学习内容,字符型数据,算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,强制类型转换运算符,浮点型数据,浮点型常量,其中:,a,为十进制数,,n,为十进制整数,都不可缺少。其可表示为,a10,n,十进制小数形式:由数字,0,9,和小数点组成。,如,:0.123,5.6,12.4,指数形式:由十进制数,加阶码标志,e,或,E,以及阶码,(只能为整数,可以带符号)组成。,一般形式为:,aen,如,:123.456e2,12.3456e3,1.23456e4,规范化指数形式,合法的实数表示:,2.1E5,表示,2.110,5,,,3.7E-2,表示,3.710,-2,。,非法的实数表示:,345,(,无小数点),,,E7,(,阶码标志,E,之前无数字,),,,-5,(,无阶码标志,),,,50.-E3,(,负号位置不对,),浮点型变量,单精度实型(,float,),float f,g;,这种定义的变量在内存中占,4,个字节(,32,位)的存储单元。,双精度实型(,double,),double x,y;,这种定义的变量在内存中占,8,个字节(,64,位)的存储单元。,长双精度实型(,long double,),long double x,y;,这种定义的变量在内存中占,16,个字节(,128,位)的存储单元。,浮点型数据,浮点型数据,浮点型变量,long double,double,float,类型,位数,64,32,128,有效数字,数值范围,67,1516,1819,-3.4*10,-38,3.4*10,38,-1.7*10,-308,1.7*10,308,-1.2*10,-4932,1.2*10,4932,注意:,三种实数类型中,其精度是,float double=!=,),逻辑运算符:(!,&|,),位运算符 :(,|&,),赋值运算符:(,=,及其扩展),条件运算符:(,?:,),逗号运算符:(,),指针运算符:(*,&,),求字节数 :(,sizeof,),强制类型转换:(类型),分量运算符:(,.-,),下标运算符:(,),其它 :(,()-,),C,语言的运算符与表达式,算术运算符与算术表达式,基本算术运算符:,+-*/%,结合方向:从左向右,优先级:,-,-,*/%,-,+-,说明:,“-”可为,单目,运算符时,右结合性,两整数相除,结果为整数,%要求两侧均为整型数据,例:,5/2 =,-5/2.0 =,例:,5%2 =,-5%2 =,1%10 =,5%1 =,5.5%2,2,-2.5,1,-1,1,0,(,),算术表达式:,表达式中的运算符都是算术运算符的表达式。,算术运算符与算术表达式,例:,j=3;k=+j;,j=3;k=j+;,j=3;printf(“%d”,+j);,j=3;printf(“%d”,j+);,a=3;b=5;c=(+a)*b;,a=3;b=5;c=(a+)*b;,/k=4,j=4,/k=3,j=4,/4,/3,/c=20,a=4,/c=15,a=4,自增、自减运算符,+-,作用:,使变量值加,1,或减,1,种类:,前置,+i,-i (,先执行,i=i,+1,或,i=i-1,,,再使用,i,值),后置,i+,i-(,先使用,i,值,再执行,i=i,+1,或,i=i-1,),算术运算符与算术表达式,自增、自减运算符注意事项:,+,和,-,运算符只能用于变量,不能用于常量和表达式,。,因为,+,和,-,蕴含着赋值操作。,例,如:,5+,、,-,(,a+b,)都是非法的表达式。,负号运算符、,+,、,-,和强制类型转换运算符的优先级相同,,当这些运算符连用时,按照从右向左的顺序计算,即具有右,结合性。,两个和之间不能有空格。,在表达式中,连续使同一变量进行自增或自减运算时,很容,易出错,所以最好避免这种用法。,例如:,+i+,是非法的。,自增、自减运算,常用于循环语句中,使循环控制变变量加,(或减),-,,以及指针变量中,使指针指向下(或上)一个,地址。,算术运算符与算术表达式,例:,int p,i=2,j=3;,p=-i+;,p=?i=?,p=i+j;,p=?i=?j=?,p=i+-j;,p=?i=?j=?,p=i+-j;,p=?i=?j=?,p=i+i+;,p=?i=?,p=+i+(+i);,p=?i=?,-2,3,5,3,3,4,2,2,4,3,2,4,4,8,4,变量,与常量,整型数据,C,语言的,数据类型,浮点型数据,数据类型、运算符与表达式,学习内容,字符型数据,算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,强制类型转换运算符,简单的,赋值运算符,(,“,”,,双目运算符,右结合),格式:变量,=,常量或变量或表达式,功能:,将右边常量或变量或表达式的值赋给左边变量,例如:,int x,y,z;,x=20;,y=x;,z=x+y;,赋值运算符与赋值表达式,a+=3,a=a+3,x*=y+8,x=x*(y+8),x%=3,x=x%3,复合赋值运算符(双目运算符,右结合),种类:,+=-=*=/=%=&=|=,含义:,exp1 op=exp2 exp1=exp1 op exp2,赋值表达式,:,由赋值运算符或复合赋值运算符,将一个变量和一个表达式连接起来的表达式,称为,赋值表达式,。,格式:变量 (复合)赋值运算符 表达式,赋值运算符与赋值表达式,例如:,a=20,a=4*5,b+=3,赋值语句,:,例如:,x=8;a=b=c=5,;,赋值表达式在其后面加分号就构成了,赋值语句,。,赋值运算符及赋值表达式的使用,多个变量连续赋值,例如:,a=b=c=10,;,a=(b=(c=10),;,结果:,a,、,b,、,c,的值都为,10,赋值表达式的嵌套,例如,:,a=12;,a+=a-=a*a,a=a+(a=a-(a*a),结果:,a=-264,赋值运算符与赋值表达式,赋值运算符与赋值表达式,赋值语句“,=”,左边必须是变量名或对应某特定内存单元,的表达式不能是常量或其它表达式。,例如:,30=a;b+2=5;,都是错误的。,赋值语句中的“,=”,表示赋值,不是代数中相等的意思。,要表示相等的意思则应用关系运算符“,=”,表示,二者,切勿混淆!,注意:,变量,与常量,整型数据,C,语言的,数据类型,浮点型数据,数据类型、运算符与表达式,学习内容,字符型数据,算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,强制类型转换运算符,强制类型转换运算符,不同,数据,类型,的转,换,自动转换,强制转换,-,通过,强制类型转换运算符,转换,运算转换,-,不同类型数据混合运算时,赋值转换,-,把一个值赋给与其类型不同的变量时,输出转换,-,输出时转换成指定的输出格式,函数调用转换,-,实参与形参类型不一致时转换,强制类型转换运算符,自动转换,-,运算转换:,double,float,long,unsigned,int,char,short,低,高,必定的转换,运算对象类型不同时转换,例:,char ch;,int i;,float f;,double d;,ch/i +f*d -(f+i),int,int,double,double,double,double,double,double,int,int,double,double,double,double,double,double,10+a +i*f -d/m,例:,int i;,float f;,double d;,long m;,强制类型转换运算符,(1),短长度的数据类型 长长度的数据类型,方法:,直接将无符号短长度的数据类型的数据作为长长度的数据类型数据的低位部分,长长度的数据类型数据的高位部分补零。,无符号短长度的数据类型 无符号或有符号长长度的数据类型,例如:,unsigned char ch=0 xfc;,unsigned int a=0 xff00;,/,假设,int,数据为,16,位,int b;,unsigned long u;,b=ch;,/b,的值将是,0 x00fc,u=a;,/u,的值将是,0 x0000ff00,自动转换,-,赋值转换:,(1),短长度的数据类型 长长度的数据类型,方法:,直接将有符号短长度的数据类型的数据作为长长度的数据类型数据的低位部分,然后将低位部分的最高位(即有符号短长度数据的符号位)向长长度的数据类型数据的高位部分扩展。,有符号短长度的数据类型 无符号或有符号长长度的数据类型,强制类型转换运算符,例如:,char ch=2;,int a=-2;,int b;,unsigned long u;,b=ch;,/b,的值将是,2,u=a;,/u,的值将是,0 xfffffffe,自动转换,-,赋值转换:,(2),长长度的数据类型 短长度的数据类型,方法:,直接截取长长度的数据类型数据的低位部分(长度为短长度的数据类型的长度)作为短长度数据类型的数据。,例如:,int a=-32768;,/,假设,int,数据为,16,位,unsigned long b=0 xffffaa00;,char ch;,int c;,ch=a;,/ch,的值将是,0,c=b;,/c,的值将是,0 xaa00,强制类型转换运算符,自动转换,-,赋值转换:,(3),长度相同的数据类型转换,方法:,数据按照原样复制即可。,例如:,int a=0 xff00;,unsigned int b=a;,/b,的值将是,0 xff00,强制类型转换运算符,自动转换,-,赋值转换:,强制转换,-,强制类型转换运算符:,强制类型转换运算符,一般形式:,(,类型说明符,)(,表达式,),功能:,把表达式的运算结果强制转换成类型说明符所表示的类型。其,中,,(,类型说明符,),是强制类型转换符,它的优先级比较高。,例:,float x=3.5,y=2.1,z;,int a;,a=(int)(x+y);,/,结果为,5,z=(int)x+y;,/,结果为,5.100000,z=(double)(3/2);,/,结果为,1.000000,a=(int)3.6;,/,结果为,3,精度损失问题,较高类型向较低类型转换时可能发生,强制类型转换运算符,在使用强制转换时应注意以下问题:,类型说明符和表达式都必须加括号。,例如:把,(int)(x+y),写成,(int)x+y,则成了把,x,转换成,int,型之后再与,y,相加了。,无论是强制转换或是自动转换,都只是为了本次运算的需要,而对变量的数据长度进行的临时性转换,而不改变数据说明,时对该变量定义的类型。,例如:,(double)a,只是将变量,a,的值转换成一个,double,型的中间,量,其数据类型并未转换成,double,型。,变量,与常量,整型数据,C,语言的,数据类型,浮点型数据,数据类型、运算符与表达式,学习内容,字符型数据,算术运算符与算术表达式,赋值运算符与赋值表达式,逗号运算符与逗号表达式,强制类型转换运算符,逗号运算符:,逗号表达式:,用逗号连接起来的表达式。,一般形式:表达式,1,,表达式,2,,,,表达式,k,优先级:,优先级最低。,结合性:,左结合性。即逗号表达式的求值顺序是,从左向右,依,此计算用逗号分隔的各表达式的值。,逗号表达式,的值:,最后一个表达式的值就是整个逗号表达式的值。,用途:,常用于循环,for,语句中,。,例如:,a+3,b=4,b+,逗号运算符与逗号表达式,例,:,a=3*5,a*4,a=3*5,a*4,a+5,例,:,x=(a=3,6*3),x=a=3,6*a,例:,a=1;b=2;c=3;,printf(“%d,%d,%d”,a,b,c);,printf(“%d,%d,%d”,(a,b,c),b,c);,/a=15,表达式值60,/a=15,表达式值20,/,赋值表达式,表达式值18,,x=18,/,逗号表达式,表达式值18,x=3,/1,2,3,/3,2,3,例,:,#include,vo,id main(),int x,y=7;,float z=4;,x=(y=y+6,y/z);,printf(x=%dn,x);,运行结果:,x=3,逗号运算符与逗号表达式,其它运算符与表达式,关系运算符与关系表达式,逻辑运算符与逻辑表达式,位运算符与位运算表达式,条件运算符与条件表达式,关系运算符与关系表达式,关系运算符(自左向右),关系表达式的值:是逻辑值“真”或“假”,用,1,和,0,表示,例,int a=3,b=2,c=1,d,f;,ab,(ab)=c,b+cb,f=abc,/,表达式值1,/,表达式值1,/,表达式值0,/d=1,/f=0,种类:,=!=,关系运算注意:,关系运算符与关系表达式,例,5278,在,C,中是允许的,,值为,0,例 ,a0,结果为,A100,结果为,1,0,例,注意区分“,=,”,与“,=,”,int a,=,0,b,=,1;,if(a,=,b),printf(“a equal to b”);,else,printf(“a not equal to b”);,例,应避免对,实数,作相等或不等的判断,如,1.0/3.0*3.0=1.0,结果为,可改写为:,fabs(1.0/3.0*3.0-1.0)3&2|83)&2|(8(4-(!0)值为1,逻辑运算符与逻辑表达式,位运算符与位运算表达式,种类:按位与(,&,)、按位或(,|,)、按位取反(,)、,按位异或(,)、左移(,)。,位运算符:,“,与,”,运算,:,又称为,逻辑乘,,,C,语言中用,“,&,”,来表示。如有,A,、,B,两个逻,辑变量,可能有的取值情况只有,4,种。,A,B,A&B,0,0,0,0,1,0,1,0,0,1,1,1,结论:即只有,A,、,B,两个变量取值均为,1,,则它们“与”运算的结果才为,1,,其它均为,0,。,位运算符与位运算表达式,“,或”运算,又称为,逻辑加,,,C,语言中用“,|”,来表示。如有,A,、,B,两个逻辑变,量,可能有的取值情况只有,4,种。,A,B,A&B,0,0,0,0,1,1,1,0,1,1,1,1,结论:即,A,、,B,变量中只要一个变量取值为,1,,则它们,“,或,”,运算的结果就是,1,。,位运算符与位运算表达式,“,非,”,运算,又称为,逻辑反,,,C,语言中用,“,”,来表示。,A,A,0,1,1,0,结论:即将,A,的值求反。,位运算符与位运算表达式,“,异或”运算,C,语言中用“,”,来表示。如有,A,、,B,两个逻辑变量,可能有的,取值情况只有,4,种。,A,B,AB,0,0,0,0,1,1,1,0,1,1,1,0,结论:即当两个变量的取值相异时,则它们“异或”运算的结果就是,1,,相同则结果为,0,。,位运算符与位运算表达式,左移(,):,实现将某变量所对应的二进制数往左移位,溢出,的最高位被丢掉,空出的低位用零填补。,返回整型值的表达式,返回整型值的表达式,例:,int a=3;,a 2,:,将,a,所对应的二进制数左移两位,该表达式的值为,12,。,2,):,右移运算实现将某变量所对应的二进制数往右移位,,溢出的最低位被丢掉,如果变量是无符号数,空出的高,位用零填补,如果变量是有符号数,空出的高位用原来,的符号位填补(即负数填,1,,正数填,0,)。,返回整型值的表达式,返回整型值的表达式,位运算符与位运算表达式,例:将,short,类型数据的高、低位字节互换,#include,void main(),short a=0 xf245,b,c;,b=a 8;,/,将,a,的高,8,位移到低,8,位赋值给,c,,,c,的值为,0 xfff2,c=c,/,将,c,的高,8,位清,0,后赋值给,c,,,c,的值为,0 x00f2,a=b+c;,/,将,b,和,c,的值相加赋值给,a,,,a,的值为,0 x45f2,printf(a=%x,a);,a=0 x45f2,条件运算符与表达式,功能:相当于条件语句,但不能取代一般,if,语句,一般形式:,expr1?expr2 :expr3,expr1,取,expr2,值,取,expr3,值,非,0,=0,例,if(ab),printf(“%d”,a);,else,printf(“%d”,b);,printf(“%d”,ab?a:b);,例 求,a+|b|,printf(“a+|b|=%dn”,b0?a+b:a-b);,运算符的优先级和结合性,优 先 级,运 算 符,需要操作数的个数,结 合 性,高,低,(),从左向右,+-,(负号运算符),sizeof (,类型,),1,(单目运算符),从右向左,*,/%,2,(双目运算符),从左向右,+-,(减法),2,(双目运算符),从左向右,2,(双目运算符),从左向右,&,2,(双目运算符),从左向右,2,(双目运算符),从左向右,|,2,(双目运算符),从左向右,=+=-=*=/=%=,=&=|=,2,(双目运算符),从右向左,从左向右,判断表达式,0XF0F0&0X1010+0X0A0A 5/2,的值?,0XF0F0&0X1010+0X0A0A 5/2,2,0X1A1A,0XF0F0&,0X6868,0XF0F0&,0X6060,/,的优先级最高,+,的优先级比,&,、,高,的优先级比,&,高,本章小结,本章所介绍的主要内容是整型数据、实型数据和字符型数据的常量表示法和变量定义格式,以及可以作用于这些数据类型的运算符。虽然本章的内容比较烦杂,学起来也许比较枯燥,但本章的内容是学好,C,语言的基础,是每个,C,语言程序员必须熟练掌握的。现在我们一起来回忆一下本章有哪些内容值得我们特别留意和必须深刻领会的呢?,变量的含义,数据在内存中的表示形式,不同类型的数据在内存中的表示范围,转义字符,有符号数与无符号数的区别,数据类型的自动转换与强制类型转换,各种运算符、运算符的优先级和结合性,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服