《C语言关系运算符和位运算符.ppt》由会员分享,可在线阅读,更多相关《C语言关系运算符和位运算符.ppt(43页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、2本节主要内容介绍本节主要内容介绍u 3.5.5 关系运算符和关系表达式关系运算符和关系表达式u 3.5.6 逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式u 3.5.7 条件运算符和条件表达式条件运算符和条件表达式u 3.5.9 位运算符位运算符u 3.5.10 求字节运算符求字节运算符3 3.5.5关系运算符和关系表达式关系运算符和关系表达式1.1.关系运算符及其优先次序关系运算符及其优先次序 ( (小于小于) ) = ( ( (大于大于) ) = (= (大于或等于大于或等于) ) = (= (等于等于) ) != (!= (不等于不等于)优先级相同(高)优先级相同(高)优先级相同(低)优
2、先级相同(低)说明:关系运算符的优先级低于算术运算符关系运算符的优先级低于算术运算符关系运算符的优先级高于赋值运算符关系运算符的优先级高于赋值运算符4关系运算符和关系表达式关系运算符和关系表达式 52.2.关系表达式关系表达式用关系运算符将两个表达式(可以是算术表达式或用关系运算符将两个表达式(可以是算术表达式或 关系表达式,逻辑表达式,赋值表达式,字符表达式)关系表达式,逻辑表达式,赋值表达式,字符表达式) 接起来的式子,称关系表达式接起来的式子,称关系表达式例:例:ab,a+bb+c,(a=3)(b=5),ab)(bb”的值为的值为“真真”,表达式的值为,表达式的值为1。 a=3,b=2,
3、c=1 则关系表达式“(ab)=c”的值为1C C语言中没有专用语言中没有专用的逻辑值,的逻辑值,1 1代表代表真,真,0 0代表假代表假关系运算符和关系表达式关系运算符和关系表达式6关系运算符和关系表达式关系运算符和关系表达式7关系表达式关系表达式 使用注意:使用注意:尽量使用尽量使用( )以使关系清晰。以使关系清晰。n如如: (ab)=(b+c)避免类似错误:避免类似错误:n如:要表示如:要表示xa,b,不可写为不可写为: a=x=a)&(x=b)应避免对实数作相等或不等的判断。应避免对实数作相等或不等的判断。n如:如:1.0/3.0*3.0=1.0 结果为结果为 0. 可改写为:可改写为
4、:fabs(1.0/3.0*3.0-1.0)3 看成看成 “真真” & “真真” 值为值为1l注意:注意:数学上关系式数学上关系式 0 x 100 要写成:要写成:0=x & x3&83&84-!0 自左向右运算自左向右运算 1&0逻辑值为逻辑值为083逻辑值为逻辑值为1表达式值为表达式值为0逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式13在逻辑表达式的求解中,在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行并不是所有的逻辑运算符都要被执行。(1)a&b&c (1)a&b&c 只有只有a a为真时,才需要判断为真时,才需要判断b b的值的值,只有,只有a a和和b b都为真时,都为真时,
5、 才需要判断才需要判断c c的值。的值。(2)a|b|c (2)a|b|c 只要只要a a为真,就不必判断为真,就不必判断b b和和c c的值,的值,只有只有a a为假,才为假,才 判断判断b b。a a和和b b都为假才判断都为假才判断c c例例:(m=ab)&(n=cd)当当a=1,b=2,c=3,d=4,ma=1,b=2,c=3,d=4,m和和n n的原值为的原值为1 1时,由于时,由于“ab”ab”的值的值为为0 0,因此,因此m=0m=0,而,而“n=cd”n=cd”不被执行,因此不被执行,因此n n的值不是的值不是0 0而而仍保持原值仍保持原值1 1。逻辑运算符和逻辑表达式逻辑运算
6、符和逻辑表达式14逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式a=2,b=1,c=0,d=115逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式逻辑运算符的应用:逻辑运算符的应用:(1) 表示成绩(表示成绩(grade) 在在90以上以上(含含)和和60分以下的情况:分以下的情况: grade=90 | grade0 & (x%2=0)(3) 判断闰年的条件是符合下列两种之一判断闰年的条件是符合下列两种之一: 能被能被4整除整除, 但不能被但不能被100整除整除; 能被能被400整除整除 (year%4=0&year%100!=0) | (year%400=0)(4)表示表示 x 是数字字符的情况
7、是数字字符的情况 x=0 & x=48 & xy+ B)x=y-z D)y%z=y-z2、x为奇数时值为为奇数时值为“真真”,x为偶数时值为为偶数时值为“假假”,表达式是,表达式是( ) A)!(x%2=1) B)x%2=0 C)x%2 D)!(x%2)3、已有定义语句:、已有定义语句:int m=0,n=1;执行表达式执行表达式(m=59)后,后,n的值是(的值是( ) A)1 B)2 C)3 D)44、已有定义语句:、已有定义语句:int m=0,n=3;执行表达式执行表达式(m=53)|(n=7=100) & (s300) (B) 100= s=100) & (s=100) and (s
8、300)6若定义若定义 int a=2,b=3; 则表达式则表达式 !a|b 的值为(的值为( )。)。 (A) 0 (B) 1 (C) 2 (D) 37设整型变量设整型变量x为为7,使整型变量,使整型变量y不为不为2的表达式是(的表达式是( )。)。 (A) y=x%3 (B) y = x/3 (C) y =(+x)/3 (D) y=8-(-x)183.5.7条件运算符和条件表达式条件运算符和条件表达式 C语言提供了一个简单的条件赋值语句或条件表达式。语言提供了一个简单的条件赋值语句或条件表达式。l一般形式一般形式 表达式表达式1?表达式表达式2: 表达式表达式3l功能功能: 先判表达式先判
9、表达式1, 若非若非0,则值为表达式则值为表达式2的值的值,否则为表否则为表达式达式3的值的值。n条件运算符的优先级条件运算符的优先级高于赋值运算符高于赋值运算符,但,但低于关系运算符低于关系运算符和逻辑运算符。例如:和逻辑运算符。例如: a=1; b=2; c = ab ? 3 : 4;main() int i=3, j=5, k; k=ib?(a=100):(b=100) ab?printf(%d,a):printf(%d,b)n表达式表达式2、表达式、表达式3的类型可以不同,此时条件表达式的类型可以不同,此时条件表达式值取二者值取二者中较高的类型。中较高的类型。 如:如: xy?1:1.
10、5 /若若xy, 则则值为值为1.0; 若若xb)?a:b;printf(max=%fn,max);21条件运算符和条件表达式条件运算符和条件表达式例:输入一个字符,判别它是否大写字母,如果是,将它转换例:输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。成小写字母;如果不是,不转换。然后输出最后得到的字符。 程序程序: #include void main() char ch; scanf(%c,&ch); ch=(ch=A & ch=Z)?(ch+32):ch; printf(%cn,ch); 运行结果:运行结果: 输入:输入:A 输出
11、:输出:a22n应用运算符和表达式应注意应用运算符和表达式应注意运算符功能运算符功能运算符与运算对象的关系运算符与运算对象的关系n要求运算对象的个数要求运算对象的个数n要求运算对象的类型要求运算对象的类型运算符的运算符的优先级优先级运算的运算的结合方向结合方向 运算结果的类型运算结果的类型混合运算中的类型转换混合运算中的类型转换条件运算符和条件表达式条件运算符和条件表达式233.5.9位运算符位运算符概念概念l 位运算是指位运算是指按二进制位进行的运算按二进制位进行的运算。因为在系统。因为在系统软件中,常要处理二进制位的问题。软件中,常要处理二进制位的问题。l 例如:将一个存储单元中的各例如:
12、将一个存储单元中的各二进制位左移或右二进制位左移或右移一位移一位,两个数按位相加等两个数按位相加等。l 语言提供位运算的功能,与其他高级语言(如语言提供位运算的功能,与其他高级语言(如PASCALPASCAL)相比,具有很大的优越性)相比,具有很大的优越性。24位运算符位运算符语言提供的位运算符有:语言提供的位运算符有:运算符运算符 含义含义 运算符运算符 含义含义 按位与按位与 取反取反 | | 按位或按位或 右移右移(1)(1)位运算符中除以外,均为二目(元)运算符,位运算符中除以外,均为二目(元)运算符,即要求两侧各有一个运算量。即要求两侧各有一个运算量。(2)(2)运算量只能是运算量只
13、能是整型或字符型整型或字符型的数据,的数据,不能为实型不能为实型数据。数据。251 1、“按位与按位与”运算符()运算符()按位与是指:按位与是指:参加运算的两个数据,按二进制位进行参加运算的两个数据,按二进制位进行“与与”运算。如果运算。如果两个相应的二进制位都为,则该两个相应的二进制位都为,则该位的结果值为位的结果值为;否则为。即:;否则为。即:,例:例:并不等于,应该是按位与运算:并不等于,应该是按位与运算:注意:注意:如果参加如果参加& &运算的是运算的是负数(如负数(如-3&-5-3&-5),则要以),则要以补码形式表示为二进制数,补码形式表示为二进制数,然后再按位进行然后再按位进行
14、“与与”运运算。算。3&5的值得 00000011(3)& 00000101(5) 00000001(1) 26“按位与按位与”运算符运算符n按位与运算有两个特点:按位与运算有两个特点:和二进制位数和二进制位数0 0相与相与则该则该位位被清零被清零; ;和二进制位数相与和二进制位数相与则则该位保留原值不该位保留原值不变变。利用这两个特点。利用这两个特点, ,可以指定一个数的某一位可以指定一个数的某一位( (或某几位或某几位) )置置0,0,也可以检验一个数的某一位也可以检验一个数的某一位( (或某或某几位几位) )是否是。是否是。n例如:例如:a=a&3;a=a&3;只保留只保留a a的右端两
15、位二进制位数的右端两位二进制位数。n又如:若又如:若a & 4 a & 4 值为值为4 4,则,则变量变量a a的右端第的右端第3 3位为位为。n按位与运算符按位与运算符“&”&”和逻辑与运算符和逻辑与运算符“&”&”不同不同,对于逻辑与运算符对于逻辑与运算符“&”&”,只要两边运算数为非,只要两边运算数为非0 0,运算结果为运算结果为 1 1。例如。例如41 & 165 41 & 165 的值是的值是 1 1。272 2、“按位或按位或”运算符(运算符(| |)两个相应的二进制位中两个相应的二进制位中只要有一个为,该位的结只要有一个为,该位的结果值为果值为。即即 | |,| |,| |,|
16、|例:例: 060|017,060|017,将八进制数将八进制数6060与八进制数与八进制数1717进行按进行按位或运算。位或运算。 00110000| 00001111 00111111 28“按位或按位或”运算符运算符 0000 0000 0010 1001 (十进制数十进制数41) 0000 0000 1010 0101 (十进制数十进制数165) 0000 0000 1010 1101 (十进制数十进制数173) 利用按位或运算的特点,利用按位或运算的特点,可以可以指定一个数的某一位指定一个数的某一位(或某几位或某几位)置置1,其它位保留原值不变。,其它位保留原值不变。 例如:例如:a
17、=a|3;把;把a的右端两位二进制位数置的右端两位二进制位数置1,其它,其它位保留原值不变。位保留原值不变。a=a0 xff;把把a的低字节全置的低字节全置1,高字节保持原样。,高字节保持原样。a=a0 xff00;把把a的高字节全置的高字节全置1,低字节保持原样。,低字节保持原样。293 3、“异或异或”运算符(运算符()异或运算符异或运算符也称也称XORXOR运算符。它的规则是:运算符。它的规则是:若参加运算的两个二进制位若参加运算的两个二进制位同号则结果为(假)同号则结果为(假) 异号则结果为(真)异号则结果为(真)即即:00=0:00=0,01=101=1,10=110=1, 11=0
18、11=0例:例:即即:071052=023 :071052=023 (八进制数)(八进制数) 00111001 00101010 00010011 30“异或异或”运算符运算符例如:例如:int a=41165 ;则;则a的值为的值为140,运算过程用,运算过程用二进制表示如下:二进制表示如下: 0000 0000 0010 1001 (十进制数十进制数41) 0000 0000 1010 0101 (十进制数十进制数165) 0000 0000 1000 1100 (十进制数十进制数140) 按位异或运算可以按位异或运算可以把一个数的二进制位的把一个数的二进制位的某一位某一位 (或某几位或某
19、几位) 求反求反 (0变变1,1变变0)。例如:。例如:a=a3;将变量;将变量 a 的最右端的二位求反。的最右端的二位求反。314 4、“取反取反”运算符()运算符()是一个单目(元)运算符,用来对一个二进制数是一个单目(元)运算符,用来对一个二进制数按位取反,即将变,将变。按位取反,即将变,将变。例如,是对八进制数(即二进制数例如,是对八进制数(即二进制数)按位求反。)按位求反。 00000000000101010000000000010101() 11111111111010101111111111101010 (八进制数八进制数177752)177752)32“取反取反”运算符运算符例
20、如:例如:int i=199; 则:则: i值为值为-200,这是因为:,这是因为:十进十进199写成二进制写成二进制: 0000 0000 1100 0111把它按位取反把它按位取反 1111 1111 0011 1000,这,这个数是整型十进制数个数是整型十进制数 -200在内存的补码表示。在内存的补码表示。 1111111 0011 0111 000000011001000335 5、左移运算符()、左移运算符()左移运算符是用来将一个数的左移运算符是用来将一个数的各二进制位全部左移各二进制位全部左移若干位若干位。例如:例如:a=2a=2 将的二进制数左移位,右补。将的二进制数左移位,右
21、补。若,即二进制数,若,即二进制数,左移位得,左移位得,( (十进制数)十进制数)高位左移后溢出,舍弃。高位左移后溢出,舍弃。char a=5, b;b=a3; a的二进制值为的二进制值为 0000 0101 , 执行语句执行语句b=a)()右移运算符是右移运算符是a2a2表示将表示将a a的的各二进制位右移各二进制位右移2 2位位,移到右端移到右端的低位被舍弃的低位被舍弃, ,右移时右移时, ,对于正整数和无符号整数对于正整数和无符号整数, ,高位高位( (左端左端) )补补0; 0; 对于负数对于负数, ,高位高位( (左端左端) )补补1(1(补码表示法最高位补码表示法最高位1 1表示负
22、表示负数数) )。例如:例如:char a=41, b;b=a3; 用二进制来表示用二进制来表示, a的值为的值为 0010 1001 (十进制数十进制数41) 执行语句执行语句b=a3;之后;之后b 的值为的值为 0000 0101 (十进制十进制数数5=41/2/2/2,注意是整数除,注意是整数除),运算后,运算后a的值并没有改变仍的值并没有改变仍为为41)。右移时,每右移右移时,每右移1位,相当于除以位,相当于除以 2(整数除整数除)。357. 7. 位运算赋值运算符位运算赋值运算符 它们是它们是: =, =2相当于相当于a=a2, b|=c 相当于相当于b=b|c8. 8. 位运算优先
23、关系位运算优先关系例如:语句例如:语句 a=10&53; 执行后执行后a的值为的值为8。“=y; 运行后运行后z的值为的值为_ 。3若定义若定义 int a=-5, b= -8, c=-12; 则表达式则表达式 a=b|bc 的值为(的值为( )。)。4int a, b; 则表达式则表达式 (a=2, b=5, a* *2, + b, a+b) 的值的值是是_。5int m=5, n=3; 则表达式则表达式 (m+1, n+1, (-m)+(n-) 的值的值是是_。39课课 堂堂 练练 习习6若有定义:若有定义:int a,b; double x,则以下不符合,则以下不符合C语言语法的语言语法
24、的表达式是(表达式是( )。)。 (A) x%(-3) (B) a+=-2 (C) a=b=2 (D) x=a+b7若有定义:若有定义:int b=7; float a=2.5, c=4.7; 则表达式则表达式a+(b/2* *(int)(a+c)/2)%4 的值是(的值是( )。)。 (A) 2.5 (B) 3.5 (C) 4.5 (D) 5.588已定义已定义 char c = A ; 则正确的赋值表达式是(则正确的赋值表达式是( )。)。 (A) c=028 (B) c=(c+)%4 (C) c+1=66 (D) c+=127-40课课 堂堂 练练 习习9定义:定义:int x=4,y=
25、2,z=0; 则表达式则表达式 (x-y=y)| (y=z)的的值是(值是( )。)。 (A) 1 (B) 0 (C) 2 (D) 410下面叙述正确的是(下面叙述正确的是( )。)。 (A) 强制类型转换运算的优先级高于算术运算强制类型转换运算的优先级高于算术运算 (B) 若若a和和b是整型变量是整型变量, (a+b)+是合法的是合法的 (C) A* * B 是不合法的是不合法的 (D) A+ B是合法的是合法的11若若a为奇数时为奇数时,表达式为表达式为真真, a为偶数时为偶数时, 表达式表达式假假。则不能满足要求的表达式是(则不能满足要求的表达式是( )。)。 (A) a%2=1 (B)
26、 !(a%2=0) (C) !(a%2) (D) a%241课课 堂堂 练练 习习12判定逻辑值为判定逻辑值为“真真的最准确叙述是(的最准确叙述是( )。)。 (A) 1 (B) 大于大于0的数的数 (C) 非非0的整数的整数 (D) 非非0的数的数13下面叙述中,错误的是(下面叙述中,错误的是( )。)。 (A) 算术运算对象不包含函数算术运算对象不包含函数 (B) %(模运算符模运算符)的运算对象只能为整型量的运算对象只能为整型量 (C) 算术运算符的结合方向是算术运算符的结合方向是自左至右自左至右42课课 堂堂 练练 习习14已定义已定义 double k=3.6; 则正确的赋值表达式是(则正确的赋值表达式是( )。)。 (A) k=double(-3.6) (B) k%3 (C) k=k* *(-1.0)=-3.6 (D) k+=k-=(k=1.2)* *(k=3)15设已定义设已定义 float a=2.0,b=3.0; 使使a值为值为5.0的表达式是的表达式是( )。)。 (A) a+= b (B) a* *=b+2.0 (C) a/=b+2.0 (D) a-=b+2.0结束结束