C语言关系运算符和位运算符.ppt

上传人:小飞机 文档编号:5426259 上传时间:2023-07-05 格式:PPT 页数:42 大小:330.99KB
返回 下载 相关 举报
C语言关系运算符和位运算符.ppt_第1页
第1页 / 共42页
C语言关系运算符和位运算符.ppt_第2页
第2页 / 共42页
C语言关系运算符和位运算符.ppt_第3页
第3页 / 共42页
C语言关系运算符和位运算符.ppt_第4页
第4页 / 共42页
C语言关系运算符和位运算符.ppt_第5页
第5页 / 共42页
点击查看更多>>
资源描述

《C语言关系运算符和位运算符.ppt》由会员分享,可在线阅读,更多相关《C语言关系运算符和位运算符.ppt(42页珍藏版)》请在三一办公上搜索。

1、第3章 关系运算符和位运算符,本节主要内容介绍,3.5.5 关系运算符和关系表达式 3.5.6 逻辑运算符和逻辑表达式 3.5.7 条件运算符和条件表达式 3.5.9 位运算符 3.5.10 求字节运算符,关系运算符和关系表达式,1.关系运算符及其优先次序(大于)=(大于或等于)=(等于)!=(不等于),说明:关系运算符的优先级低于算术运算符关系运算符的优先级高于赋值运算符,关系运算符和关系表达式,如:ca+b ab!=c a=bc,建议:使用()能使关系更清晰!,c(a+b),(ab)!=c,a=(bc),a=(bc),2.关系表达式用关系运算符将两个表达式(可以是算术表达式或 关系表达式,

2、逻辑表达式,赋值表达式,字符表达式)接起来的式子,称关系表达式例:ab,a+bb+c,(a=3)(b=5),ab)(bb”的值为“真”,表达式的值为1。a=3,b=2,c=1 则关系表达式“(ab)=c”的值为1,C语言中没有专用的逻辑值,1代表真,0代表假,关系运算符和关系表达式,关系运算符和关系表达式,例 int i=1,j=7,a;a=i+(j%4!=0);则 a的值为,例 int a=3,b=2,c=1,d,f;ab(ab)=c b+cb f=abc(a=5)b)(bc),例 a 0 结果为 A 100 结果为,例 若a=0;b=0.5;x=0.3;则 a=x=b的值为,/表达式值1,

3、/表达式值1,/表达式值0,/d的值为1,/f的值为0,/表达式值0,/表达式值1,/表达式值1,2,1,0,0,关系表达式 使用注意:尽量使用()以使关系清晰。如:(ab)=(b+c)避免类似错误:如:要表示xa,b,不可写为:a=a)&(x=b)应避免对实数作相等或不等的判断。如:1.0/3.0*3.0=1.0 结果为 0.可改写为:fabs(1.0/3.0*3.0-1.0)1e-6注意区分“=”与“=”,常把“=”误写为“=”。如:a=1与a=1含义不同。,关系运算符和关系表达式,逻辑运算符和逻辑表达式,1.逻辑运算符及其优先次序(1)&(逻辑与)相当于其他语言中的AND(2)|(逻辑或

4、)相当于其他语言中的OR(3)!(逻辑非)相当于其他语言中的NOT例:a&b 若a,b为真,则a&b为真。a|b 若a,b之一为真,则a|b为真。!a 若a为真,则!a为假。,优先次序:!算术运算符 关系运算符&|赋值=,逻辑运算符和逻辑表达式,在C语言中:0被看成是“假”,“假”就是0 非零值被看成是“真”,“真”就是1如:a=-3.5&53 看成“真”&“真”值为1注意:数学上关系式 0 x 100 要写成:0=x&x=100,逻辑运算符和逻辑表达式,如:ab&xy a=b|x=y!a|ab,如:(ab)&(xy)(a=b)|(x=y)(!a)|(ab),建议:使用()能使关系更清晰!,2

5、.逻辑表达式用逻辑运算符将关系表达式或逻辑量连接起来的式子就 是逻辑表达式。逻辑表达式的值应该是一个逻辑量“真”或“假”。,例:设a=4,b=5:!a的值为0 a&b的值为1a|b的值为1!a|b的值为14&0|2的值为1,任何非零的数值被认作“真”,逻辑运算符和逻辑表达式,例:53&84-!0 自左向右运算,1&0逻辑值为0,83逻辑值为0,4-1值为3,!0逻辑值为1,53逻辑值为1,表达式值为0,逻辑运算符和逻辑表达式,在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。(1)a&b&c 只有a为真时,才需要判断b的值,只有a和b都为真时,才需要判断c的值。(2)a|b|c 只要a为

6、真,就不必判断b和c的值,只有a为假,才 判断b。a和b都为假才判断c,例:(m=ab)&(n=cd)当a=1,b=2,c=3,d=4,m和n的原值为1时,由于“ab”的值为0,因此m=0,而“n=cd”不被执行,因此n的值不是0而仍保持原值1。,逻辑运算符和逻辑表达式,逻辑运算符和逻辑表达式,例3.12 逻辑表达式的不完全计算 void main()int a,b,c,d;a=0;b=1;c=a+,a=2,b=1,c=0,d=1,逻辑运算符和逻辑表达式,逻辑运算符的应用:(1)表示成绩(grade)在90以上(含)和60分以下的情况:grade=90|grade0 能被400整除(year%

7、4=0&year%100!=0)|(year%400=0)(4)表示 x 是数字字符的情况 x=0&x=48&x=57),课堂练习:,1、已有定义语句,int x=3,y=4,z=5;则值为0的表达式是()A)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=79)后,n的值是()A)1 B)2 C)3

8、 D)4,课堂练习,5能正确表示数学关系式 100s300的表达式为()。(A)(s=100)则表达式!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),条件运算符和条件表达式,C语言提供了一个简单的条件赋值语句或条件表达式。一般形式 表达式1?表达式2:表达式3功能:先判表达式1,若非0,则值为表达式2的值,否则为表达式3的值。条件运算符的优先级高于赋值运算符,但低于关系运算符和逻辑运算符。例如:a=1;b=2;c=ab?3:4;,main()int i=3,

9、j=5,k;k=ij?i+:j+;printf(i=%d,j=%d,k=%dn,i,j,k);,i=4,j=5,k=3,条件运算符和条件表达式,条件表达式 说明:条件表达式语句功能相当于一种条件语句,但不等价于一般if语句。表达式2、表达式3不仅可以是数值表达式,还可以是赋值表达式或函数表达式。如:ab?(a=100):(b=100)ab?printf(%d,a):printf(%d,b)表达式2、表达式3的类型可以不同,此时条件表达式值取二者中较高的类型。如:xy?1:1.5/若xy,则值为1.0;若xy,则值为1.5。,条件运算符和条件表达式,例3.13 输入两个数,输出其中较大的数#in

10、clude stdio.hmain()float a,b,max;printf(please input two real numbers:);scanf(%f%f,条件运算符和条件表达式,例:输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。程序:#include void main()char ch;scanf(%c,运行结果:输入:A 输出:a,应用运算符和表达式应注意运算符功能运算符与运算对象的关系要求运算对象的个数要求运算对象的类型运算符的优先级运算的结合方向 运算结果的类型混合运算中的类型转换,条件运算符和条件表达式,位运算符,

11、概念 位运算是指按二进制位进行的运算。因为在系统软件中,常要处理二进制位的问题。例如:将一个存储单元中的各二进制位左移或右移一位,两个数按位相加等。语言提供位运算的功能,与其他高级语言(如PASCAL)相比,具有很大的优越性。,位运算符,语言提供的位运算符有:,运算符 含义 运算符 含义 按位与 取反|按位或 右移,(1)位运算符中除以外,均为二目(元)运算符,即要求两侧各有一个运算量。(2)运算量只能是整型或字符型的数据,不能为实型数据。,说明:,1、“按位与”运算符(),按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为,则该位的结果值为;否则为。即:,例

12、:并不等于,应该是按位与运算:,注意:如果参加&运算的是负数(如-3&-5),则要以补码形式表示为二进制数,然后再按位进行“与”运算。,3&5的值得,00000011(3)&00000101(5)00000001(1),“按位与”运算符,按位与运算有两个特点:和二进制位数0相与则该位被清零;和二进制位数相与则该位保留原值不变。利用这两个特点,可以指定一个数的某一位(或某几位)置0,也可以检验一个数的某一位(或某几位)是否是。例如:a=a只保留a的右端两位二进制位数。又如:若a&4 值为4,则变量a的右端第3位为。按位与运算符“&”和逻辑与运算符“&”不同,对于逻辑与运算符“&”,只要两边运算数

13、为非0,运算结果为 1。例如41&165 的值是 1。,2、“按位或”运算符(|),两个相应的二进制位中只要有一个为,该位的结果值为。即|,|,|,|例:060|017,将八进制数60与八进制数17进行按位或运算。,“按位或”运算符,0000 0000 0010 1001(十进制数41)0000 0000 1010 0101(十进制数165)0000 0000 1010 1101(十进制数173)利用按位或运算的特点,可以指定一个数的某一位(或某几位)置1,其它位保留原值不变。例如:a=a|3;把a的右端两位二进制位数置1,其它位保留原值不变。a=a0 xff;把a的低字节全置1,高字节保持原

14、样。a=a0 xff00;把a的高字节全置1,低字节保持原样。,3、“异或”运算符(),异或运算符也称XOR运算符。它的规则是:若参加运算的两个二进制位同号则结果为(假)异号则结果为(真)即:00=0,01=1,10=1,11=0,例:,即:071052=023(八进制数),“异或”运算符,例如:int a=41165;则a的值为140,运算过程用二进制表示如下:0000 0000 0010 1001(十进制数41)0000 0000 1010 0101(十进制数165)0000 0000 1000 1100(十进制数140)按位异或运算可以把一个数的二进制位的某一位(或某几位)求反(0变1,

15、1变0)。例如:a=a3;将变量 a 的最右端的二位求反。,4、“取反”运算符(),是一个单目(元)运算符,用来对一个二进制数按位取反,即将变,将变。例如,是对八进制数(即二进制数)按位求反。,“取反”运算符,例如:int i=199;则:i值为-200,这是因为:十进199写成二进制:0000 0000 1100 0111把它按位取反 1111 1111 0011 1000,这个数是整型十进制数-200在内存的补码表示。1111111 0011 0111 000000011001000,5、左移运算符(),左移运算符是用来将一个数的各二进制位全部左移若干位。例如:a=2 将的二进制数左移位,

16、右补。若,即二进制数,左移位得,(十进制数),高位左移后溢出,舍弃。,char a=5,b;b=a3;a的二进制值为 0000 0101,执行语句b=a3;之后b的值为 0010 1000(十进制数40=5*2*2*2),运算后a的值并没有改变仍为5)。每左移1位,相当于乘以 2。若高位移出的部分包含有二进制位数 1,则不能用左移代替乘以 2。,6、右移运算符(),右移运算符是a2表示将a的各二进制位右移2位,移到右端的低位被舍弃,右移时,对于正整数和无符号整数,高位(左端)补0;对于负数,高位(左端)补1(补码表示法最高位1表示负数)。例如:char a=41,b;b=a3;用二进制来表示,

17、a的值为 0010 1001(十进制数41)执行语句b=a3;之后b 的值为 0000 0101(十进制数5=41/2/2/2,注意是整数除),运算后a的值并没有改变仍为41)。右移时,每右移1位,相当于除以 2(整数除)。,7.位运算赋值运算符 它们是:=,=2相当于a=a2,b|=c 相当于b=b|c8.位运算优先关系例如:语句 a=10 执行后a的值为8。“”的优先级高于“&”,先进行位移运算。,求字节数运算符sizeof,是一个单目运算符,返回运算对象所占内存总空间的字节数。它的运算对象可以是变量、常量或数据类型。它有三种形式:sizeof(数据类型)sizeof(变量或常量)size

18、of(变量或常量)通常用于确定数组或结构体长度,也用于动态分配内存空间,后面章节会学到。,例3.15 sizeof运算符的一个实例#include stdio.hmain()char ch;float f;printf(size of 5.0=%dn,sizeof 5.0);printf(float=%dn,sizeof(f);printf(int=%dn,sizeof(int);printf(char=%dn,sizeof(ch);printf(size of c=%dn,sizeof(c);,运行情况如下:size of 5.0=8float=4int=2char=1size of c=2

19、,课 堂 练 习,1int x,a;则语句 x=(a=4,a*2);运行后,x、a的值依次为_。2若已定义 int x=3,y=10,z;语句 z=x=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-)的值是_。,课 堂 练 习,6若有定义:int a,b;double x,则以下不符合C语言语法的表达式是()。(A)x%(-3)(B)a+=-2(C)a=b=2(D)x=a+b7若有定义:in

20、t 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-,课 堂 练 习,9定义:int x=4,y=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为奇

21、数时,表达式为真,a为偶数时,表达式假。则不能满足要求的表达式是()。(A)a%2=1(B)!(a%2=0)(C)!(a%2)(D)a%2,课 堂 练 习,12判定逻辑值为“真的最准确叙述是()。(A)1(B)大于0的数(C)非0的整数(D)非0的数13下面叙述中,错误的是()。(A)算术运算对象不包含函数(B)%(模运算符)的运算对象只能为整型量(C)算术运算符的结合方向是自左至右,课 堂 练 习,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,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号