大家好,欢迎来到IT知识分享网。
导语
一、关系运算和逻辑运算
1、C语言的逻辑值
关系表达式和逻辑表达式的运算结果都会得到一个逻辑值。逻辑值只有两个,分别用“真”
和“假”来表示。在C语言中,没有专门的“逻辑值”,而是用非0表示”真”,用0表示“假”。因
此,对于任意一个表达式,如果值为0,就代表一个“假”值;如果值是非发,无论是正数还是负数,
都代表一个“真”值。
2、关系运算符和关系表达式
3、C语言的关系运算符
(1) < (小于) | (3) <= (小于或等于) |
(2) > (大于) | (4) >= (大于或等于) |
(5)== (等于) | (6) != (不等于) |
注意:1、由两个字符组成的运算符之间不允许有空格,如:<=就不能写成<=。
2、关系运算符是双目运算符,具有自左至右的结合性。
4、关系运算符、算术运算符和赋值运算符之间的优先级次序是:算术运算符的优先级别最高,关系运算符次之,赋值运算符的优先级别最低。
4、关系表达式及关系表达式的值
由关系运算符构成的表达式,称为关系表达式。关系运算符两边的运算对象可以是C语言中任意合法的表达式。例如,a>=b、(a=3)>(b=4)、a>c==c等都是合法的关系表达式。
关系运算的值为“逻辑值”,只有两种可能:整数0或者整数1。例如,若变量a中的值为10,变量b中的值为6时,表达式a>=b为“真”,其值为1;若a中的值为10,b中的值为16时,表达式a>=b为“假”,其值为0。
当关系运算符两边值的类型不一致时,例如一边是整型,另一边是浮点型,则系统将自动把整型数转换为浮点数,然后进行比较,其类型转换规则与附录3中所列双目算术运算符两边运算数的类型转换规则相同。若x和y都是浮点数,应当避免使用x==y这样的关系表达式,因为通常存放在内存中的浮点是有误差的,因此不可能精确相等,这将导致关系表达式x==y的值总是为0。
5、逻辑运算符和逻辑表达式
1、C语言的逻辑运算符
(1)C语言提供了三种逻相运算符,分别是:(1)8&逻辑“与” (2)逻辑“或” (3)1逻辑”非”
其中,运算符8&和1为双目运算符,运算符!为单目运算符,出现在运算对象的左边。逻辑运算符具有自左至右的结合性。
以上运算符的优先级次序是:!(逻辑“非”)级别最高,&&(逻辑“与”)次之,1(逻辑“或”)最低。
逻辑运算符与赋值运算符、算术运算符、关系运算符之间从高到低的运算优先次序是:!(逻辑“非”)、算术运算符、关系运算符、&&(逻辑“与”)、1(逻辑“我”)、赋值运算符。
2、逻辑表达式和逻辑表达式的值
由逻辑运算符和运算对象组成的表达式称为逻辑表达式。逻辑运算的对象可以是C语言
中任意合法的表达式。逻辑表达式的运算结果或者为1(“真”),或者为0(“d”)。例如:在关
系表达式(x>y)为真的条件下,若变量a的值为10,变量b的值为16,表达式(a>b)&&(x>y)为
“假”,表达式的值为0;若a值为10,b值为6,表达式(a>b)8&(x>y)为“真”,其值为1。由逻辑
运算符构成的逻辑表达式,其运算规则如表所示。
a |
b | !a | !b | a&&b | a||b |
非0 | 0 | 0 | 1 | 1 | |
非0 | 0 | 0 | 1 | 0 | 1 |
0 | 1 | 0 | 0 | 1 | |
0 | 0 | 1 | 1 | 0 | 0 |
值得注意的是,在数学上关系式0<x<10表示x的值应在大于0并且小于10的范围内,但在C语言中不能直接用0<x<10这样一个关系表达式来表述以上的逻辑关系。因为按照C语言的运算规则,表达式0<x<10首先进行0<x的运算,其值为0或1,因此无论x是什么值,表达式0<x<10的值总是1。
对于这种情况,只有采用C语言提供的逻辑表达式0<x&&x<10才能正确表述以上关系。例如,当x的值为20时,左边关系表达式0<x的值为1,右边关系表达式x<10的值为0,“与”运算的结果为0;当x的值为-1时,左边关系表达式的值为0,右边关系表达式的值为1,“与”运算的结果仍为0;只有当x的值在0到10的范围内时,左右两边的关系表达式的值均为1,“与”运算的结果才为1。
C语言中,由&&或||构成的逻辑表达式,在特定的情况下会产生“短路”现象。例如有以下逻辑表达式:
a++&&b++ 若a的值为0表达式首先去求a++的值,由于表达式a++的值为(系统完全可以确定逻辑表达a0,式的运算结果总是为0,因此将跳过b++不再对它进行求值。在这种情况下,a的值将自增1,由0变成1,而b的值将不变。若a的值不为0,则系统不能仅根据表达式a++的值来确定逻辑表达式的运算结果,因此必然要再对运算符&&右边的表达式b++进行求值,这时将进行+的运算,使b的值改变。又如以下逻辑表达式:a++||b++ 若a的值为1,表达式首先去求a++的值,由于表达式a++的值为1,无论表达式b++为何值,系统完全可以确定逻辑表达式的运算结果总是为1,因此也将跳过b++不再对它进行求值。在这种情况下,a的值将自增1,b的值将不变。若a的值为0,则系统不能仅根据表达式a++的值来确定逻辑表达式的运算结果,因此必然要再对运算符右边的表达式b++进行求值,这时将进行b++的运算,运算结果不仅使a的值改变,也改变了b的值。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/156752.html