《第5章运算符及其表达式优秀课件.ppt》由会员分享,可在线阅读,更多相关《第5章运算符及其表达式优秀课件.ppt(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第第5章章 运算符及其表运算符及其表达式达式第1页,本讲稿共43页5.1 5.1 算术运算符及算术表达式算术运算符及算术表达式算术运算符包括基本算术运算符和自增、自减运算符。基本算术运算符是对算术运算符包括基本算术运算符和自增、自减运算符。基本算术运算符是对数值型也包括字符型数据进行加、减、剩、除的四则运算。数值型也包括字符型数据进行加、减、剩、除的四则运算。第2页,本讲稿共43页5.1.1 5.1.1 算术运算符算术运算符算术运算符的具体运用原则算术运算符的具体运用原则:+(正)、(正)、-(负)运算符是属于同一级别的单目运算符,结合方向是自右向(负)运算符是属于同一级别的单目运算符,结合方
2、向是自右向左。左。+(加)、(加)、-(减)运算符是属于同一级别的双目运算符,结合(减)运算符是属于同一级别的双目运算符,结合方向是自左向右。例如方向是自左向右。例如a+b-c+da+b-c+d*,/,%是同一级别的双目运算符,结合方向是自左向右。例如:是同一级别的双目运算符,结合方向是自左向右。例如:a+b*ca+b*c,运算顺序是先计算,运算顺序是先计算b b与与c c的乘积,然后再与的乘积,然后再与a a求和,即求和,即a+(b*c)a+(b*c)。第3页,本讲稿共43页算术运算符注意以下几点算术运算符注意以下几点:/(除法运算符)的除数不能为(除法运算符)的除数不能为0 0,即不能用一
3、个数去除以,即不能用一个数去除以0 0。*(乘号运算符)在式子中不能省略,也不能写成是代数式子中的乘号(乘号运算符)在式子中不能省略,也不能写成是代数式子中的乘号“”或或“”。例如:求长方体的体积公式为。例如:求长方体的体积公式为abcabc,在编程时要写成,在编程时要写成:a*b*c:a*b*c。如果两个整型数相除,得到整型结果。如果两个实数相除或其中有一个如果两个整型数相除,得到整型结果。如果两个实数相除或其中有一个是实数,那么得到结果为实型。例如:是实数,那么得到结果为实型。例如:5/3=15/3=1,2/4=02/4=0,5/-3=15/-3=1,5./3=1.6666675./3=1
4、.666667,5.0/3.0=1.666667 5.0/3.0=1.666667%求余运算符(或称求模运算),只适合于整型数据和字符型数据。求余运求余运算符(或称求模运算),只适合于整型数据和字符型数据。求余运算的结果符号与被除数相同,其值等于两数相除后的余数。算的结果符号与被除数相同,其值等于两数相除后的余数。5%3 /*5%3 /*值为值为2*/2*/-7%-3 /*-7%-3 /*值为值为-1*/-1*/第4页,本讲稿共43页算术运算符注意以下几点算术运算符注意以下几点:+、-(自增、自减运算符)属于同一级别的单目运算符,结合方向是自右向左。(自增、自减运算符)属于同一级别的单目运算符
5、,结合方向是自右向左。自增、自减运算符只能与变量结合使用,放在变量的前面或者是后面。有以下自增、自减运算符只能与变量结合使用,放在变量的前面或者是后面。有以下4 4种形式:种形式:+a+a:a a的值先增加的值先增加1 1后,再参与其他运算。后,再参与其他运算。a+a+:a a的值先参与其他运算,再使的值先参与其他运算,再使a a的值增加的值增加1 1。-a-a:a a的值先减小的值先减小1 1后,再参与其他运算。后,再参与其他运算。a-a-:a a的值先参与其他运算,再使的值先参与其他运算,再使a a的值减小的值减小1 1。例如:例如:m=3;m1=m+;m=3;m1=m+;等价于等价于m=
6、3;m+;m1=m;m=3;m+;m1=m;【例【例5-15-1】“+”和和“-”运算符在的使用。运算符在的使用。第5页,本讲稿共43页对于自增、自减运算符,做以下几点说明:对于自增、自减运算符,做以下几点说明:自增或自减函数只能用于变量,不能用于常量或表达式。例如:自增或自减函数只能用于变量,不能用于常量或表达式。例如:(a+b)+(a+b)+这这样的表示方法是错误的。样的表示方法是错误的。在一个表达式中对一个变量自增或自减多次,可能造成困惑。在一个表达式中对一个变量自增或自减多次,可能造成困惑。a=3;k=(+a)+(+a);a=3;k=(+a)+(+a);这种程序很容易出错,在编程的过程
7、中要避免使用这样的程序,这种程序很容易出错,在编程的过程中要避免使用这样的程序,而且也没有必要使用如此难懂的程序,完全可以使用另一种方法来表示,增加程序而且也没有必要使用如此难懂的程序,完全可以使用另一种方法来表示,增加程序的可读性。的可读性。+、-运算符的结合方向是自右向左,如:运算符的结合方向是自右向左,如:-i+-i+等价于等价于-(i+)-(i+)。+、-运算符的优先级大于乘、除、求余的优先级。运算符的优先级大于乘、除、求余的优先级。+、-运算符运算的操作对象只能为整型变量、字符型变量和指针变量,而不能运算符运算的操作对象只能为整型变量、字符型变量和指针变量,而不能是其他类型的变量。是
8、其他类型的变量。+、-运算符运算常用于循环变量中,是循环变量自动加运算符运算常用于循环变量中,是循环变量自动加1 1或减或减1;1;也可也可用于指针变量,是指针指向前一个或后一个地址。用于指针变量,是指针指向前一个或后一个地址。第6页,本讲稿共43页5.1.2 5.1.2 算术表达式算术表达式用算术运算符将运算对象即运算量或操作数连接起来,用算术运算符将运算对象即运算量或操作数连接起来,构成符号构成符号C语言语法规则的式子,称为算术表达式。算术表语言语法规则的式子,称为算术表达式。算术表达中,运算对象包括常量、变量和函数。达中,运算对象包括常量、变量和函数。例如:例如:x+y*a/x-5%3,
9、3.5+56%10+3.14,a+*1/3。第7页,本讲稿共43页5.1.2 5.1.2 算术表达式算术表达式关于算术表达式有以下几点说明:关于算术表达式有以下几点说明:算术表达式的求值顺序按算术运算的优先级别高低次序算术表达式的求值顺序按算术运算的优先级别高低次序进行,先执行优先级别高的,再执行优先级别低的。进行,先执行优先级别高的,再执行优先级别低的。以表达式以表达式8%3+9/28%3+9/2为例,为例,%、/运算符的优先级高于运算符的优先级高于+运算运算的优先级,因此在运算的过程中先算求余和除法,的优先级,因此在运算的过程中先算求余和除法,8%3=28%3=2,9/2=49/2=4,然
10、后再求和,然后再求和2+4=62+4=6,因此最后的结果为,因此最后的结果为6 6。在算术表达式中,运算对象有常量,也有变量。在算术表达式中,运算对象有常量,也有变量。例如:例如:a a+5*2+5*2(double)(8%3)(double)(8%3)【例【例5-25-2】算术表达式的应用举例。】算术表达式的应用举例。第8页,本讲稿共43页5.2 5.2 赋值运算符及赋值表达式赋值运算符及赋值表达式C语言的赋值运算符包括简单的赋值运算符和复合赋值语言的赋值运算符包括简单的赋值运算符和复合赋值运算符,本小节主要讲解简单的赋值运算符,复合赋值运算运算符,本小节主要讲解简单的赋值运算符,复合赋值运
11、算符将在位运算符一节中进行详细的说明。符将在位运算符一节中进行详细的说明。第9页,本讲稿共43页5.2.1 5.2.1 赋值运算符赋值运算符赋值运算符与代数里面的等号相同,即赋值运算符与代数里面的等号相同,即“=”。赋值运。赋值运算符的作用是把运算符右边的表达式的值赋给其左边的变量,算符的作用是把运算符右边的表达式的值赋给其左边的变量,其结合性是从右向左。例如:其结合性是从右向左。例如:a=5;第10页,本讲稿共43页5.2.1 5.2.1 赋值运算符赋值运算符对赋值运算符我们有以下几点认识:对赋值运算符我们有以下几点认识:(1 1)赋值运算符)赋值运算符“=”左边必须是变量,右边可以常量、变
12、量,也可以是函数调用或表左边必须是变量,右边可以常量、变量,也可以是函数调用或表达式。达式。例如:例如:s=a*b/c-12.34s=a*b/c-12.34int a;a=int a;a=b b;(2 2)赋值与运算符)赋值与运算符“=”与数学中的等号与数学中的等号“=”看起来相同,但是它们的含义、作用看起来相同,但是它们的含义、作用完全不同。完全不同。a=a+2;a=a+2;(3 3)复合赋值运算符是由其他运算符与基本的赋值运算符组合而成的。)复合赋值运算符是由其他运算符与基本的赋值运算符组合而成的。例如:例如:a+=3;a+=3;相当于:相当于:a=a+3;a=a+3;,b*=a;b*=a
13、;相当于相当于b=b*a;b=b*a;。h/=x+y;h/=x+y;不能理解为:不能理解为:h=h/x+yh=h/x+y,应该理解为,应该理解为h=h/(x+y)h=h/(x+y)第11页,本讲稿共43页5.2.2 5.2.2 赋值表达式赋值表达式由赋值运算符将一个变量和一个表达式连接起来的式子由赋值运算符将一个变量和一个表达式连接起来的式子称为赋值表达式。一般的书写形式如下:称为赋值表达式。一般的书写形式如下:变量变量 赋值运算符赋值运算符 表达式表达式赋值表达式:赋值表达式:a=10 b=c+d a/=d+2a=10 b=c+d a/=d+2赋值语句:赋值语句:a=10;b=c+d;a/=
14、d+2;a=10;b=c+d;a/=d+2;第12页,本讲稿共43页5.2.2 5.2.2 赋值表达式赋值表达式对于赋值表达式,需要说明以下几点:对于赋值表达式,需要说明以下几点:(1 1)赋值运算符的左边必须为变量,而赋值表达式的)赋值运算符的左边必须为变量,而赋值表达式的左边可以是变量,也可以是赋值表达式。当赋值表达式的左左边可以是变量,也可以是赋值表达式。当赋值表达式的左边是赋值表达式的时候,应该带上括号。边是赋值表达式的时候,应该带上括号。(a=3*4)=4*6(a=3*4)=4*6(正确)(正确)a=3*4=4*6 a=3*4=4*6(错误)(错误)(2 2)赋值表达式的右边的表达式
15、可以是一个算术表达)赋值表达式的右边的表达式可以是一个算术表达式、关系表达式、逻辑表达式等等,也可以是一个赋值表达式、关系表达式、逻辑表达式等等,也可以是一个赋值表达式。例如:式。例如:c2=c1=5c2=c1=5相当于相当于c2=c2=(c1=5c1=5)(3 3)赋值表达式里面可以包含复合赋值运算符。)赋值表达式里面可以包含复合赋值运算符。例如:例如:c2=c1+=1c2=c1+=1相当于相当于c2=(c1+=1)c2=(c1+=1)(4 4)在)在C C语言中,赋值操作不仅出现在赋值语句中,而语言中,赋值操作不仅出现在赋值语句中,而且可以以表达式形式出现在其他语句中。且可以以表达式形式出
16、现在其他语句中。printf(printf(“%d%d”,a=b=3);,a=b=3);第13页,本讲稿共43页5.3 5.3 关系运算符及关系表达式关系运算符及关系表达式C语言中关系运算常用于选择结构、循环结构的条件判语言中关系运算常用于选择结构、循环结构的条件判断。由关系运算符连接的式子称为关系表达式,用于条件的断。由关系运算符连接的式子称为关系表达式,用于条件的判断。判断。第14页,本讲稿共43页5.3.1 5.3.1 关系运算符关系运算符关系运算符是用来比较两个运算量大小的运算符,实际关系运算符是用来比较两个运算量大小的运算符,实际上就是一种上就是一种“比较运算比较运算”,运算的结果只
17、能是,运算的结果只能是“1”或或“0”。当两者的比较关系成立的时候,结果为。当两者的比较关系成立的时候,结果为“1”;当两者的;当两者的比较关系不成立的时候,结果为比较关系不成立的时候,结果为“0”,因此关系运算符的,因此关系运算符的结果类型为整型。结果类型为整型。第15页,本讲稿共43页5.3.1 5.3.1 关系运算符关系运算符对关系运算符进行以下几点说明:对关系运算符进行以下几点说明:(1 1)关系运算符的优先级别比算术运算符的级别低,但比赋值运算符的级别高。)关系运算符的优先级别比算术运算符的级别低,但比赋值运算符的级别高。例如:例如:a=2*28 a=2*28 顺序为顺序为a=(2*
18、2)8)a=(2*2)(c=(c=a a)该关系表达式中的表达式为赋值表达式,将字符该关系表达式中的表达式为赋值表达式,将字符a a赋值给变量赋值给变量c c,即,即A A a a,A A的的ASCIIASCII值为值为6565,a a的的ASCIIASCII值为值为9797,即,即65976597,关系不成立,关系运算的,关系不成立,关系运算的结果为结果为0 0。第17页,本讲稿共43页5.4 5.4 逻辑运算符及逻辑表达式逻辑运算符及逻辑表达式逻辑运算符与关系运算符经常放在一起使用。关系运算逻辑运算符与关系运算符经常放在一起使用。关系运算是指值与值之间的关系,逻辑运算是指将真值和假值连接在
19、是指值与值之间的关系,逻辑运算是指将真值和假值连接在一起的方式。由于关系运算符产生了真或假的结果,所以关一起的方式。由于关系运算符产生了真或假的结果,所以关系运算表达式中常常使用逻辑运算符。系运算表达式中常常使用逻辑运算符。第18页,本讲稿共43页5.4.1 5.4.1 逻辑运算符逻辑运算符逻辑运算符是对两个含有关系运算符的表达式或逻辑值逻辑运算符是对两个含有关系运算符的表达式或逻辑值进行的运算符号,运算的结果为逻辑值。进行的运算符号,运算的结果为逻辑值。第19页,本讲稿共43页对逻辑运算符作以出几点说明:对逻辑运算符作以出几点说明:(1)“&”和和“|”是双目运算,需要两个操作数,是双目运算
20、,需要两个操作数,如如a&b,a|b。而。而“!”是单目运算符,只需要一个操作数,是单目运算符,只需要一个操作数,如如!a。(2)逻辑非的优先级高于逻辑与的优先级,而逻辑与)逻辑非的优先级高于逻辑与的优先级,而逻辑与的优先级又高于逻辑非的优先级。的优先级又高于逻辑非的优先级。第20页,本讲稿共43页(3)运算符之间的运算优先顺序是逻辑非(!)运算)运算符之间的运算优先顺序是逻辑非(!)运算符优先级最高,算术运算符优先级高于关系运算符,关系运符优先级最高,算术运算符优先级高于关系运算符,关系运算符又高于逻辑与(算符又高于逻辑与(&)和逻辑或()和逻辑或(|),而赋值运算符优),而赋值运算符优先级
21、最低。先级最低。第21页,本讲稿共43页5.4.2 5.4.2 逻辑运算规则逻辑运算规则第22页,本讲稿共43页逻辑运算的运算规则可简单归纳为:逻辑运算的运算规则可简单归纳为:逻辑与同真为真逻辑与同真为真 a&b&c 逻辑或同假为假逻辑或同假为假 a|b|c 逻辑非遇假变真逻辑非遇假变真 !a 第23页,本讲稿共43页5.4.3 5.4.3 逻辑表达式逻辑表达式由逻辑运算符连接起来构成的表达式称为逻辑表达式。由逻辑运算符连接起来构成的表达式称为逻辑表达式。逻辑运算的对象通常是关系表达式逻辑表达式,也可以是算逻辑运算的对象通常是关系表达式逻辑表达式,也可以是算术表达式、赋值表达式等其他的表达式。
22、术表达式、赋值表达式等其他的表达式。例如:例如:a10&a15/*逻辑表达式的运算对象是关系表逻辑表达式的运算对象是关系表达式达式*/!(a=15)/*逻辑表达式的运算对象是逻逻辑表达式的运算对象是逻辑表达式辑表达式*/(m=ab)&(n=cd)/*逻辑运算符的运算对象是赋值逻辑运算符的运算对象是赋值表达式表达式*/t=+x|+y&+z/*逻辑运算符的运算对象是算术逻辑运算符的运算对象是算术表达式表达式*/第24页,本讲稿共43页逻辑运算有时比较复杂,需要注意以下几点:逻辑运算有时比较复杂,需要注意以下几点:(1 1)在一个逻辑表达式中可以包含多个逻辑运算和其)在一个逻辑表达式中可以包含多个逻
23、辑运算和其他各种运算符,首先注意数值哪个是数值运算,哪些是关系他各种运算符,首先注意数值哪个是数值运算,哪些是关系运算,哪些是逻辑运算,搞清各个运算符之间的关系,然后运算,哪些是逻辑运算,搞清各个运算符之间的关系,然后按它们的优先级进行运算。按它们的优先级进行运算。(2 2)逻辑表达式在进行求值的过程中,不一定必须将)逻辑表达式在进行求值的过程中,不一定必须将表达式求值到底,这是逻辑运算的特殊性所在,称为短路运表达式求值到底,这是逻辑运算的特殊性所在,称为短路运算。例如:算。例如:a&b&c a&b&c【例【例5-65-6】输入若干个字符,分别统计数字字符的个数、】输入若干个字符,分别统计数字
24、字符的个数、英文字母的个数,当输入换行符时输出统计结果,运行结束。英文字母的个数,当输入换行符时输出统计结果,运行结束。第25页,本讲稿共43页5.5 5.5 条件运算符及条件表达式条件运算符及条件表达式条件运算符是条件运算符是C语言中唯一的三目运算符,它根据一个语言中唯一的三目运算符,它根据一个表达式的结果等于表达式的结果等于true还是还是false,执行两个表达式中的一个。,执行两个表达式中的一个。由于涉及到三个操作数由于涉及到三个操作数一个用于判断的表达式和另外两一个用于判断的表达式和另外两个表达式,因此这个运算符也称为三元运算符。个表达式,因此这个运算符也称为三元运算符。第26页,本
25、讲稿共43页5.5.1 5.5.1 条件运算符条件运算符条件运算符由符号条件运算符由符号“?”和和“:”组合而成的。条件运组合而成的。条件运算符有三个运算对象,三个运算对象都表达式。第一个运算算符有三个运算对象,三个运算对象都表达式。第一个运算对象可以是任何类型的表达式,如算术表达式、关系表达式、对象可以是任何类型的表达式,如算术表达式、关系表达式、赋值表达式和逻辑表达式等等,后面两个表达式是类型相同赋值表达式和逻辑表达式等等,后面两个表达式是类型相同的任何表达式。的任何表达式。第27页,本讲稿共43页条件运算符的优先级条件运算符的优先级第28页,本讲稿共43页5.5.2 5.5.2 条件表达
26、式条件表达式由条件运算符连接而构成的表达式称为条件表达式。一由条件运算符连接而构成的表达式称为条件表达式。一般的表达形式为:般的表达形式为:表达式表达式1?表达式表达式2:表达式表达式3第29页,本讲稿共43页5.5.2 5.5.2 条件表达式条件表达式关于条件表达式做以下几点说明:关于条件表达式做以下几点说明:(1)条件表达式中含有三个操作对象,它们都是表达)条件表达式中含有三个操作对象,它们都是表达式,可以是各种类型的表达式。通常情况下,表达式式,可以是各种类型的表达式。通常情况下,表达式1是关是关系表达式或逻辑表达式,用于描述条件表达式中的条件,根系表达式或逻辑表达式,用于描述条件表达式
27、中的条件,根据条件的真假来判断是进行表达式据条件的真假来判断是进行表达式2的运算还是进行表达式的运算还是进行表达式3的运算。表达式的运算。表达式2和表达式和表达式3可以是常量、变量或表达式如算可以是常量、变量或表达式如算术表达式、关系表达式、赋值表达式和逻辑表达式等。术表达式、关系表达式、赋值表达式和逻辑表达式等。第30页,本讲稿共43页5.5.2 5.5.2 条件表达式条件表达式(2)条件表达式的求解过程:)条件表达式的求解过程:第一步:求解表达式第一步:求解表达式1的值。的值。第二步:如果表达式第二步:如果表达式1的值为真即为非的值为真即为非0,求解,求解“表达式表达式2”的值作为整个条件
28、表达式的值。的值作为整个条件表达式的值。第三步:如果表达式第三步:如果表达式1的值为假即等于的值为假即等于0,求解,求解“表达式表达式3”的值作为整个条件表达式的值。的值作为整个条件表达式的值。第31页,本讲稿共43页5.5.2 5.5.2 条件表达式条件表达式(3)条件表达式允许嵌套使用,即允许条件表达式中的)条件表达式允许嵌套使用,即允许条件表达式中的表达式表达式2和表达式和表达式3又是一个条件表达式。又是一个条件表达式。(4)一般情况下,条件表达式与结构程序设计中的)一般情况下,条件表达式与结构程序设计中的if语句语句可以进行相互替换。可以进行相互替换。(5)条件表达式中,表达式)条件表
29、达式中,表达式1的类型可以与表达式的类型可以与表达式2、表、表达式达式3的类型不同,表达式的类型不同,表达式2与表达式与表达式3的类型也可以不同,此时的类型也可以不同,此时表达式值的类型为两者较高类型。表达式值的类型为两者较高类型。第32页,本讲稿共43页5.6 5.6 逗号运算符及逗号表达式逗号运算符及逗号表达式逗号在逗号在C语言中可以作为一种运算符使用,称为逗号运语言中可以作为一种运算符使用,称为逗号运算符。算符。第33页,本讲稿共43页5.6.1 5.6.1 逗号运算符逗号运算符(1 1)逗号运算符是双目运算符,运算的对象可以是任何类型的表达式,)逗号运算符是双目运算符,运算的对象可以是
30、任何类型的表达式,运算的结果值是最后一个表达式的值。运算的结果值是最后一个表达式的值。(2 2)逗号运算符是所有运算符中优先级最低的。)逗号运算符是所有运算符中优先级最低的。(3 3)逗号运算符的结合方向是自左向右。逗号运算符将表达式连接起来,运)逗号运算符的结合方向是自左向右。逗号运算符将表达式连接起来,运算的时候按连接的顺序依次进行运算,所以又称顺序求值运算符。算的时候按连接的顺序依次进行运算,所以又称顺序求值运算符。(4 4)并不是任何地方出现的逗都是作为逗号运算符,有的时候逗号是用于各个对)并不是任何地方出现的逗都是作为逗号运算符,有的时候逗号是用于各个对象之间的间隔。象之间的间隔。p
31、rintf(%dprintf(%d,%d%d,%d%d,a a,b b,c)c);第34页,本讲稿共43页5.6.2 5.6.2 逗号表达式逗号表达式用逗号运算符将表达式连接起来构成的表达式就称为逗用逗号运算符将表达式连接起来构成的表达式就称为逗号表达式。逗号表达式的语法格式为:号表达式。逗号表达式的语法格式为:表达式表达式1,表达式,表达式2第35页,本讲稿共43页5.6.2 5.6.2 逗号表达式逗号表达式对于逗号表达式作以下几点说明:对于逗号表达式作以下几点说明:(1 1)逗号表达式的求解过程是:先求解表达式)逗号表达式的求解过程是:先求解表达式1 1,再求解表达,再求解表达式式2 2。
32、整个逗号表达式的值是表达式。整个逗号表达式的值是表达式2 2的值。的值。(2 2)逗号表达式在求解的过程中要注意各个运算符之间的优先)逗号表达式在求解的过程中要注意各个运算符之间的优先级,逗号运算符的优先级最低。级,逗号运算符的优先级最低。(3 3)逗号表达式可以进行嵌套,即表达式)逗号表达式可以进行嵌套,即表达式1 1和表达式和表达式2 2本身也可以是逗本身也可以是逗号表达式。号表达式。(4 4)逗号表达式无非是把若干个表达式)逗号表达式无非是把若干个表达式“串联串联”起来,按表达式出起来,按表达式出现的顺序依次求值,表达式现的顺序依次求值,表达式“(a=12,a*4),a+5(a=12,a
33、*4),a+5”等价于等价于“a=12,a*4,a+5a=12,a*4,a+5”,即表达式进行顺序求值。即表达式进行顺序求值。逗号表达式的一般形式可以扩展为:逗号表达式的一般形式可以扩展为:表达式表达式1 1,表达式,表达式2 2,表达式,表达式3 3表达式表达式n n第36页,本讲稿共43页5.7 5.7 位运算符位运算符位运算是位运算是C语言的一种特殊运算功能,它是以二进制位为语言的一种特殊运算功能,它是以二进制位为单位进行运算的,即进行数的二进制位的运算。单位进行运算的,即进行数的二进制位的运算。位运算符分为位逻辑运算符、位移位运算符和位自反赋值位运算符分为位逻辑运算符、位移位运算符和位
34、自反赋值运算符三种。运算符三种。位运算对象只能是整型(位运算对象只能是整型(int,short,unsigned,long)或)或字符型(字符型(char)数据。)数据。第37页,本讲稿共43页5.7.1 5.7.1 位逻辑运算符位逻辑运算符位运算是指对二进制数按位进行运算,其操作对象是一个二进制位集合,每个二进制位运算是指对二进制数按位进行运算,其操作对象是一个二进制位集合,每个二进制位只能存放位只能存放0 0或或1 1。位逻辑运算符是将数据中的每个二进制位上的。位逻辑运算符是将数据中的每个二进制位上的“0 0”或或“1 1”看成逻辑值,看成逻辑值,逐位进行逻辑运算的位运算符。逐位进行逻辑运
35、算的位运算符。1 1位逻辑运算符位逻辑运算符第38页,本讲稿共43页2位逻辑运算符的优先级位逻辑运算符的优先级第39页,本讲稿共43页5.7.2 5.7.2 移位运算符移位运算符移位运算是将数据看成二进制数,对其进行向左或右移移位运算是将数据看成二进制数,对其进行向左或右移动若干位的运算。移位运算包括左移位运算和右移位运算。动若干位的运算。移位运算包括左移位运算和右移位运算。第40页,本讲稿共43页5.7.3 5.7.3 位自反赋值运算符位自反赋值运算符复合赋值运算符是由某个规定的运算符和基本赋值运算复合赋值运算符是由某个规定的运算符和基本赋值运算符组合而成的,当组成复合赋值运算符中的符组合而
36、成的,当组成复合赋值运算符中的“某个规定的运某个规定的运算符算符”是位运算符时,复合赋值运算符就称为位自反赋值运是位运算符时,复合赋值运算符就称为位自反赋值运算符。算符。第41页,本讲稿共43页5.8 5.8 长度运算符长度运算符长度运算符是由一个关键字长度运算符是由一个关键字sizeofsizeof表示的,它用于计算表示的,它用于计算一种数据类型所占用的字节数。一种数据类型所占用的字节数。表示格式为:表示格式为:sizeof(sizeof(类型说明符或变量类型说明符或变量)第42页,本讲稿共43页对长度运算符做以下几点说明:对长度运算符做以下几点说明:(1 1)长度运算符()长度运算符(si
37、zeofsizeof)是一个单目运算符,它的)是一个单目运算符,它的功能是返回给定类型的运算对象所占内存字节的个数,因此功能是返回给定类型的运算对象所占内存字节的个数,因此长度运算的结果是一个整型数。长度运算的结果是一个整型数。(2 2)长度运算符的运算对象除了数据类型符说明符以)长度运算符的运算对象除了数据类型符说明符以外,还可以数组名或表达式等。如果运算对象是一个表达式外,还可以数组名或表达式等。如果运算对象是一个表达式(如常量、变量、数组名、结构体变量、共用体变量等),(如常量、变量、数组名、结构体变量、共用体变量等),则则 sizeof()sizeof()不会对表达式求值,只给出该表达式所占用的不会对表达式求值,只给出该表达式所占用的字节数。字节数。(3 3)长度运算符的优先级与其他单目运算符如)长度运算符的优先级与其他单目运算符如、!、!、+、-是同级别的,结合性是自右向左。是同级别的,结合性是自右向左。第43页,本讲稿共43页