您好,欢迎访问三七文档
当前位置:首页 > 幼儿/小学教育 > 小学教育 > C语言关系运算符和位运算符
1第3章关系运算符和位运算符2本节主要内容介绍3.5.5关系运算符和关系表达式3.5.6逻辑运算符和逻辑表达式3.5.7条件运算符和条件表达式3.5.9位运算符3.5.10求字节运算符33.5.5关系运算符和关系表达式1.关系运算符及其优先次序1.(小于)2.=(小于或等于)3.(大于)4.=(大于或等于)5.==(等于)6.!=(不等于)优先级相同(高)优先级相同(低)说明:关系运算符的优先级低于算术运算符关系运算符的优先级高于赋值运算符4关系运算符和关系表达式如:ca+bab!=ca==bca=bc建议:使用()能使关系更清晰!c(a+b)(ab)!=ca==(bc)a=(bc)52.关系表达式•用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符表达式)接起来的式子,称关系表达式例:ab,a+bb+c,(a=3)(b=5),’a’‘b’,(ab)(bc)•关系表达式的值是一个逻辑值,即“真”或“假”。例:关系表达式”ab”的值为“真”,表达式的值为1。a=3,b=2,c=1则关系表达式“(ab)==c”的值为1C语言中没有专用的逻辑值,1代表真,0代表假关系运算符和关系表达式6关系运算符和关系表达式例inti=1,j=7,a;a=i+(j%4!=0);则a的值为例inta=3,b=2,c=1,d,f;ab(ab)==cb+cad=abf=abc(a=5)(b=4)'a''b'(ab)(bc)例'a'0结果为'A'100结果为例若a=0;b=0.5;x=0.3;则a=x=b的值为//表达式值1//表达式值1//表达式值0//d的值为1//f的值为0//表达式值0//表达式值1//表达式值121007关系表达式使用注意:尽量使用()以使关系清晰。如:(ab)==(b+c)避免类似错误:如:要表示x∈[a,b],不可写为:a=x=b应记为:(x=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含义不同。关系运算符和关系表达式83.5.6逻辑运算符和逻辑表达式1.逻辑运算符及其优先次序(1)&&(逻辑与)相当于其他语言中的AND(2)||(逻辑或)相当于其他语言中的OR(3)!(逻辑非)相当于其他语言中的NOT例:a&&b若a,b为真,则a&&b为真。a||b若a,b之一为真,则a||b为真。!a若a为真,则!a为假。优先次序:!算术运算符关系运算符&&||赋值=9逻辑运算符和逻辑表达式a的值b的值!a的值a&&b的值a||b的值非0非0011非000010非010100100说明非0变0,0变1a,b均非0才为1a,b均0才为0在C语言中:0被看成是“假”,“假”就是0非零值被看成是“真”,“真”就是1如:a=-3.5&&53看成“真”&&“真”值为1注意:数学上关系式0≦x≤100要写成:0=x&&x=10010逻辑运算符和逻辑表达式如:ab&&xya==b||x==y!a||ab如:(ab)&&(xy)(a==b)||(x==y)(!a)||(ab)建议:使用()能使关系更清晰!112.逻辑表达式•用逻辑运算符将关系表达式或逻辑量连接起来的式子就是逻辑表达式。•逻辑表达式的值应该是一个逻辑量“真”或“假”。例:设a=4,b=5:!a的值为0a&&b的值为1a||b的值为1!a||b的值为14&&0||2的值为1任何非零的数值被认作“真”逻辑运算符和逻辑表达式12例:53&&84-!0自左向右运算1&&0逻辑值为083逻辑值为04-1值为3!0逻辑值为153逻辑值为1表达式值为0逻辑运算符和逻辑表达式13在逻辑表达式的求解中,并不是所有的逻辑运算符都要被执行。(1)a&&b&&c只有a为真时,才需要判断b的值,只有a和b都为真时,才需要判断c的值。(2)a||b||c只要a为真,就不必判断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。逻辑运算符和逻辑表达式14逻辑运算符和逻辑表达式例3.12逻辑表达式的不完全计算voidmain(){inta,b,c,d;a=0;b=1;c=a++&&b++;d=a++||b++;printf(a=%d,b=%d,c=%d,d=%d\n,a,b,c,d);}a=2,b=1,c=0,d=115逻辑运算符和逻辑表达式逻辑运算符的应用:(1)表示成绩(grade)在90以上(含)和60分以下的情况:grade=90||grade60(2)表示x是大于0的偶数:x0&&(x%2==0)(3)判断闰年的条件是符合下列两种之一:①能被4整除,但不能被100整除;②能被400整除(year%4==0&&year%100!=0)||(year%400==0)(4)表示x是数字字符的情况x='0'&&x='9'(或x=48&&x=57)16课堂练习:1、已有定义语句,intx=3,y=4,z=5;则值为0的表达式是()A)xy++B)x=++yC)x!=y+z=y-zD)y%z=y-z2、x为奇数时值为“真”,x为偶数时值为“假”,表达式是()A)!(x%2==1)B)x%2==0C)x%2D)!(x%2)3、已有定义语句:intm=0,n=1;执行表达式(m=53)&&(n=79)后,n的值是()A)1B)2C)3D)44、已有定义语句:intm=0,n=3;执行表达式(m=53)||(n=79)后,n的值是()A)1B)2C)3D)417课堂练习5.能正确表示数学关系式100≤s<300的表达式为()。(A)(s=100)&(s300)(B)100=s300(C)(s=100)&&(s300)(D)(s=100)and(s300)6.若定义inta=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语言提供了一个简单的条件赋值语句或条件表达式。一般形式表达式1?表达式2:表达式3功能:先判表达式1,若非0,则值为表达式2的值,否则为表达式3的值。条件运算符的优先级高于赋值运算符,但低于关系运算符和逻辑运算符。例如:a=1;b=2;c=ab?3:4;main(){inti=3,j=5,k;k=ij?i++:j++;printf(i=%d,j=%d,k=%d\n,i,j,k);}i=4,j=5,k=319条件运算符和条件表达式条件表达式说明:条件表达式语句功能相当于一种条件语句,但不等价于一般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。20条件运算符和条件表达式例3.13输入两个数,输出其中较大的数#includestdio.hmain(){floata,b,max;printf(pleaseinputtworealnumbers:);scanf(%f%f,&a,&b);max=(ab)?a:b;printf(max=%f\n,max);}21条件运算符和条件表达式例:输入一个字符,判别它是否大写字母,如果是,将它转换成小写字母;如果不是,不转换。然后输出最后得到的字符。程序:#includestdio.hvoidmain(){charch;scanf(%c,&ch);ch=(ch='A'&&ch='Z')?(ch+32):ch;printf(%c\n,ch);}运行结果:输入:A输出:a22应用运算符和表达式应注意运算符功能运算符与运算对象的关系要求运算对象的个数要求运算对象的类型运算符的优先级运算的结合方向运算结果的类型混合运算中的类型转换条件运算符和条件表达式233.5.9位运算符概念位运算是指按二进制位进行的运算。因为在系统软件中,常要处理二进制位的问题。例如:将一个存储单元中的各二进制位左移或右移一位,两个数按位相加等。C语言提供位运算的功能,与其他高级语言(如PASCAL)相比,具有很大的优越性。24位运算符C语言提供的位运算符有:运算符含义运算符含义&按位与~取反|按位或左移∧按位异或右移(1)位运算符中除~以外,均为二目(元)运算符,即要求两侧各有一个运算量。(2)运算量只能是整型或字符型的数据,不能为实型数据。说明:251、“按位与”运算符(&)按位与是指:参加运算的两个数据,按二进制位进行“与”运算。如果两个相应的二进制位都为1,则该位的结果值为1;否则为0。即:0&0=0,0&1=0,1&0=0,1&1=1例:3&5并不等于8,应该是按位与运算:注意:如果参加&运算的是负数(如-3&-5),则要以补码形式表示为二进制数,然后再按位进行“与”运算。3&5的值得100000011(3)&00000101(5)00000001(1)26“按位与”运算符按位与运算有两个特点:和二进制位数0相与则该位被清零;和二进制位数1相与则该位保留原值不变。利用这两个特点,可以指定一个数的某一位(或某几位)置0,也可以检验一个数的某一位(或某几位)是否是1。例如:a=a&3;只保留a的右端两位二进制位数。又如:若a&4值为4,则变量a的右端第3位为1。按位与运算符“&”和逻辑与运算符“&&”不同,对于逻辑与运算符“&&”,只要两边运算数为非0,运算结果为1。例如41&&165的值是1。272、“按位或”运算符(|)两个相应的二进制位中只要有一个为1,该位的结果值为1。即0|0=0,0|1=1,1|0=1,1|1=1例:060|017,将八进制数60与八进制数17进行按位或运算。00110000|000011110011111128“按位或”运算符0000000000101001(十进制数41)|0000000010100101(十进制数165)0000000010101101(十进制数173)利用按位或运算的特点,可以指定一个数的某一位(或某几位)置1,其它位保留原值不变。例如:a=a|3;把a的右端两位二进制位数置1,其它位保留原值不变。a=a|0xff;把a的低字节全置1,高字节保持原样。a=a|0xff00;把a的高字节全置1,低字节保持原样。293、“异或”运算符(∧)异或运算符∧也称XOR运算符。它的规则是:若参加运算的两个二进制位同号则结果为0(假)异号则结果为1(真)即:0∧0=0,0∧1=1,1∧0=1,1∧1=0例:即:071∧052=023(八进制数)00111001∧001010100001001130“异或”运算符例如:inta=41^165;则a的值为140,运算过程用二进制表示如下:0000000000101001(十进制数41)^0000000010100101(十进制数165)0000000010001100(十进制数140)按位异或运算可以把一个数的二进制位的某一位(或某几位)求反(0变1,1变0)。例如:a=a^3;将变量a的最右端的二位求反。314、“取反”运算符(~)~是一个单目(元)运算符,用来对一个二进制数按位取反,
本文标题:C语言关系运算符和位运算符
链接地址:https://www.777doc.com/doc-4007612 .html