一、条件操作符
条件操作符也叫三⽬操作符,需要接受三个操作数的,形式:exp1 ? exp2 : exp3
条件操作符的计算逻辑是:如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果;如果
exp1 为假, exp3 计算,计算的结果是整个表达式的结果。
二、关系操作符
C 语⾔⽤于⽐较的表达式,称为 “关系表达式” ,⾥⾯使⽤的运算符就称 为“关系运算符”,主要有下⾯6个。
> | ⼤于运算符 |
< | ⼩于运算符 |
>= | ⼤于等于运算符 |
<= | ⼩于等于运算符 |
== | 相等运算符 |
!= | 不相等运算符 |
关系表达式通常返回 0 或 1 ,表⽰真假。
C 语⾔中, 0 表⽰假,所有⾮零值表⽰真。⽐如, 20 > 12 返回 1 , 12 > 20 返回 0
【注意】关系运算符不宜连用。比如0.4<0.5<0.6 我们在数学的学习中确实可以这样写,但是在C语言里先是判断0/4和0.5的大小,为真则返回1。后面再用1和0.6比较就出错了。
三、逻辑操作符:&& , || , !
在上面的操作中,我们想要对比0.4 0.5 0.6 这三个数的大小时,我们就可以用到逻辑运算符。
我先来介绍一下逻辑运算符:
! | 逻辑取反运算符(改变单个表达式的真假)。 |
&& | 与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。 |
|| | 或运算符,就是或者的意思(两侧⾄少有⼀个表达式为真,则为真,否则为假)。 |
1.逻辑取反运算符
就是直接取反的意思
假设a是正确的返回值就为非0,那!a就为错误的,那!a就为0。
假设a是错误的返回值就为0,那!a就为正确的,返!a回值1
2.逻辑与运算符
&& 就是与运算符,也是并且的意思, && 是⼀个双⽬操作符,使⽤的⽅式是 a&&b , && 两边的表达 式都是真的时候,整个表达式才为真,只要有⼀个是假,则整个表达式为假。
这⾥表达的意思就是month既要⼤于等于3,⼜要⼩于等于5,必须同时满⾜。同时满足才能输出“第一季度”。
3.逻辑或运算符
|| 就是或运算符,也就是或者的意思, || 也是⼀个双⽬操作符,使⽤的⽅式是 a || b , ||
两边的表达式只要有⼀个是真,整个表达式就是真,两边的表达式都为假的时候,才为假
四、逻辑操作符中的短路现象
细心的我们其实已经发现,在逻辑与和逻辑或运算符中如果出现第一个条件已经不满足条件——对于逻辑与运算符(已经满足——对于逻辑或运算符)会出现什么现象呢?
这种情况称为“短路”。原因就是C语⾔逻辑运算符有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是保证的。如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。
接下来我们用实验来证明一下
这里可以看到,a在输入时的值为0。那逻辑与运算符就会觉得这是一个假的值,就会直接跳出函数。那自然后面的++b和d++也不会执行。但a有一个自增的过程。所以最后面输出的就是a = 1 b = 2 c = 3 d = 4。
当我们将a的值变为2时,这一串赋值操作就会一直继续,最终输出这个结果。
那我们来看看下面的这个逻辑或
逻辑或运算符是需要两个值都为假的时候才会结束。所以当a=0输入时不会跳出函数,而是继续执行。在执行到++b的时候,因为输入的值为>0的,为真。则前面的a++||++b整体输出的值应该为非零值,为真,那后面的d++就不会执行。所以a++和++b都有执行,但是d++没有执行。所以最后应该为a=1 b+3 c=3 d=4。
感谢大家的认真观看,麻烦大家指出我的不足,我会努力改进