关系运算符和逻辑运算符

关系运算符

关系运算符也叫比较运算符,像数学中10 > 9、1 < x < 5 等等,表示一种判定关系,给出的这种关系可能是正确的也可能是错误的,例如可以有“1 > 2”这种判定,但这是错误的判断。
计算机中也支持这种判定,但结果只有两种,要么判断正确要么判断错误。
正确则称为“真”,错误则称为“假”。任意给出这样一个判定,要么为真要么为假并不会出现其他情况,并且也不会出现相同的判定在一种情况下为真、另一种情况下为假的情况。
C/C++中提供了多种用于判断两个表达式关系的运算符:

运算符作用
==判定两个表达式的值相等
!=判定两个表达式的值不相等
>判定左边表达式的值大于右边表达式的值
<判定左边表达式的值小于右边表达式的值
>=判定左边表达式的值大于或等于右边表达式的值
<=判定左边表达式的值小于或等于右边表达式的值

其中要注意的是,其中的 >= 实际意思是:大于或者等于只要一个成立则整个判断为真(<= 同理),例如:

int a = 5;
int b = 3;
a > b 	// 值为真
a >= b	// 虽然等于不成立,但大于成立,所以判断也为真

逻辑运算符

在数学中,我们可以使用像“1 < x < 4”这种联合的判定。但C/C++中不能直接这样使用,例如:

int x = 3;
1 < x < 4	// 这是错误的语法

“1 < x < 4”表示的是x > 1 而且 x < 4,要使用这种联合的判定,要使用逻辑运算符连接多个判定条件。

运算符作用
&&两个判定条件同时为真则整个判定条件为真,否则为假
||两个判定条件至少有一个为真则整个判定条件为真,否则为假
!原判断条件为真则整个判定条件为假,反之亦然

例如:

int a = 1;
int b = 4;
int c = 7;
(a < b) && (b < c)  // 两个条件均为真,整个判定为真
(a > b) || (b < c)  // 两个条件至少一个为真,整个判定为真
!( a == b)  // 原判定条件为假,整个表达式为真

&& 运算符的特点是:从左到右一次执行各个判断条件,如果遇到一个条件为假则判断整个条件为假,不再执行后面的条件。
|| 运算符的特点是:从左到右一次执行各个判断条件,如果遇到一个条件为真则判断整个条件为假,不再执行后面的条件。
对于一般的条件表达式这并不影响程序执行,但如果有赋值、自增自减表达式则可能影响变量的值,例如:

int a = 1;
int b = 3;
int c = 7;
(a > b) && (c = 10);  // c的值为7,c=10不执行
(a < b) && (c = 10);  // c=1不执行
c = 7;
(a > b) || (c = 10);  // c的值为7,c=10不执行
(a < b) || (c = 10);  // c=10执行

语句和表达式

语句是C/C++语言中的执行单位,以分号标识一条语句的结束。例如:

int a = 10; // 初始化语句
a = 20;  // 赋值语句
; 	//空语句,什么也不做

表达式则是由运算符连接起来的各种值(字面量或者变量),表达式的特点是每个表达式都有一个值。例如:

123	// 字面量本身也是表达式,表达式的值就是变量的值
a	// 变量本身也是表达式,表达式的值就是变量的值
a = 10	// 赋值表达式的值就是被赋值后该变量a的值
a++ // ++在右边时,自增表达式的值就是a的原值
++a // ++在左边时,自增表达式的值就是a自增后的值
a > b // 条件表达式的值为判断结果的值,真或假
a + b // 算数表达式的值为进行算数运算后的结果

要注意,C/C++中值都是有类型的,像之前提到,字面量有自己的识别类型、变量中的值被认为时该变量的类型。
一些表达式的值本身就直接得到,像字面量和变量本身的值。
一些表达式的值是通过计算或执行得到的,像赋值表达式、自增自减表达式、算数表达式、比较表达式都是对该表达式进行了执行、计算、判定之后得到该表达式的结果。
表达式加上分号后可以形成语句,但语句并不都是由表达式形成,例如:

int a = 10; // 初始化语句,但int a = 10 这并不是一个表达式,其中的a = 10也不应该看作赋值表带式,因为如果是数组初始化,数组名是不能被赋值的。

判断是不是表达式以及得到表达式的值,只需要将其赋值给一个变量,例如:

int a = (int b = 10);	// 错误,(int b = 10)并不是表达式
int a,b,c;
a = b = c = 10;	// 赋值表达式的值是赋值后变量的值,从右向左依次执行赋值运算并得到表达式的值
int a = 1 < 2; // 关系表达式的值要么为1,要么为0,分别表示真和假

非条件表达式作为条件时的真假

逻辑运算符连接的可以是条件表达式也可以是其他表达式,例如之前的代码:

(a > b) || (c = 10);  // c的值为7,c=10不执行
(a < b) || (c = 10);  // c=10执行

这里c = 10只是赋值表达式,而不是条件表达式但仍能作为逻辑运算符连接的一个子条件。
在C/C++中,条件表达式的值是int类型整数1或0:

struct MyStruct mt = 1 > 2;	 // int 0
struct MyStruct mt = 1 < 2;  // int 1

而其他非条件表达式有自己的值,如果放在条件表达式的位置会根据原表达式的值被判定为真或假,
非0值的表达式被认为是真,0值表达式被认为是假:

1	// 真
a = 1	// 真
1.23	// 真
0	// 假
0.0	// 假
a = 0	// 假
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值