当前位置: 首页 > news >正文

关系,条件和逻辑操作符详解

1关系操作符

C 语言用于比较的表达式,称为 “关系表达式”(relational expression),里面使用的运算符就称 为“关系运算符”(relational operator),主要有下面6个。

> 大于运算符

< 小于运算符

>= 大于等于运算符

<= 小于等于运算符

== 相等运算符

!= 不相等运算符

关系表达式通常返回 0 或 1 ,表示真假。 C 语言中, 0 表示假,所有⾮零值表示真

⽐如, 20 > 12 返回 1 , 12 > 20 返回 0

 关系表达式常用于 if 或 while 结构。

注意:相等运算符 == 与赋值运算符 = 是两个不一样的运算符,不要混淆。有时候,可能会不小心写出下面的代码,它可以运行,但很容易出现意料之外的结果。

类如

为了防⽌出现这种错误,有的程序员喜欢将变量写在等号的右边。

这样子的话,编译器会报错

另⼀个需要避免的错误是:多个关系运算符不宜连⽤。

i < j < k 上面例子中,连续使用两个小于运算符

这是合法表达式,不会报错,但是通常达不到想要的结果

即不是保证变量 j 的值在 i 和 k 之间。

因为关系运算符是从左到右计算

所以实际执行的是下面的表达式

  (i < j) < k

上面例子中, i < j 返回 0 或 1

所以最终是 0 或 1 与变量 k 进行比较

2条件操作符

条件操作符也叫三⽬操作符,需要接受三个操作数的,形式如下:

exp1 ? exp2 : exp3

条件操作符的计算逻辑是:

如果 exp1 为真, exp2 计算,计算的结果是整个表达式的结果

如果 exp1 为假, exp3 计算,计算的结果是整个表达式的结果

类如

#define   _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
main()
{
	printf("猜下我的年龄;\n");
	int a = 0;
	scanf("%d", &a);
	a < 18 ? printf("嘻嘻嘻") : printf("我有那么老嘛");

	return  0;
}

来看一下运行结果吧

想必通过这个代码,大家便已经对条件关系符有了充分的认识,那么继续进行逻辑操作符的学习吧

3逻辑操作符

逻辑运算符提供逻辑判断功能,⽤于构建更复杂的表达式,主要有下面三个运算符。

• ! :逻辑取反运算符(改变单个表达式的真假)。

• && :逻辑与运算符,就是并且的意思(两侧的表达式都为真,则为真,否则为假)。

• || :逻辑或运算符,就是或者的意思(两侧至少有⼀个表达式为真,则为真,否则为假)。

注:C语言中,非0表示真,0表示假

4短路

C语⾔逻辑运算符还有⼀个特点,它总是先对左侧的表达式求值,再对右边的表达式求值,这个顺序是 保证的。

如果左边的表达式满⾜逻辑运算符的条件,就不再对右边的表达式求值。

这种情况称为“短路”。

if(month >= 3 && month <= 5)

表达式中&& 的左操作数是 month >= 3 ,右操作数是 month = 3 的结果是0的时候,即使不判断 month <= 5 ,整个表达式的结果也是0。 所以,对于&&操作符来说,左边操作数的结果是0的时候,右边操作数就不再执行。

if(month == 12 || month==1 || month == 2)

如果month == 12,则不用再判断month是否等于1或者2,整个表达式的结果也是1。 所以, || 操作符的左操作数的结果不为0时,就无需执行右操作数。

像这种仅仅根据左操作数的结果就能知道整个表达式的结果,不再对右操作数进行计算的运算称为短路求值。

相关文章:

  • Kafka系列之:Dead Letter Queue死信队列DLQ
  • 去中心化技术的崛起:探索Web3的新时代
  • vue去除数组最后一个元素
  • 【书生大模型实战营(暑假场)】入门任务二 Git 关卡
  • zabbix7.0 设置中文语言( Debian GNU/Linux 12)
  • 费用流,EK算法,Primal Dual 算法详解,OJ练习
  • Spring Boot 集成 Apache Shiro 实现权限管理
  • 节点使用简介:comfyui-photoshop
  • unity2107,导入spine骨骼动画报错
  • 深入浅出Java RestClient与Elasticsearch:一次简单的聚合查询实现
  • 旋转字符串 | LeetCode-796 | 模拟 | KMP | 字符串匹配
  • 学习日志8.14--ALC(Access Control List)访问控制列表
  • 【虚拟化】计算虚拟化技术简介,CentOS使用KVM、QEMU安装并管理虚拟机
  • 放飞孔明灯
  • 分班结果发布必备工具!
  • PHP反序列化
  • C语言手撕数据结构代码_顺序表_静态存储_动态存储
  • 赋能基层,融合创新:EasyCVR视频汇聚平台构建平安城市视频共享系统
  • 通过网关将数据上传到两台eqmx服务器上
  • ArduinoIDE无法直接安装ESP32库解决方案(需梯子)
  • 学者纠错遭网暴,人民锐评:“饭圈”该走出畸形的怪圈了
  • 18世纪“精于剪切、复制、粘贴”的美国新闻界
  • 干部任职公示:陕西宁强、镇安两县县长拟进一步使用
  • 巴基斯坦称回应挑衅,对印度发起军事行动
  • 拿出压箱底作品,北京交响乐团让上海观众享受音乐盛宴
  • 夜读丨喜马拉雅山的背夫