C语言操作符2

从充电管理芯片里‘偷师’:拆解一个PMOS双向开关电路,搞定你的固态继电器需求 本文深入解析了PMOS双向开关电路在固态继电器应用中的设计要点,重点探讨了防电流倒灌和高侧双向开关的实现技巧。通过拆解充电管理芯片中的PMOS背靠背结构,工程师可以构建高效可靠的固态开关方案,适用于智能硬件和电池管理系统。文章还提供了关键参数选择、电路优化建议及实测数据对比,助力解决电源防反接等工程难题。 阅读详情

        在这篇文章中,主要讲解关系操作符、条件操作符、逻辑操作符,及其短路。

目录

一. 关系操作符

        注意1:相等运算符==与赋值运算符是两个不一样的运算符,不能混淆。

        注意2:多个关系运算符不宜连用

二. 条件操作符(也叫三目操作符)

 三. 逻辑操作符:&&,||,!

3.1逻辑取反运算符!(单目操作符)

3.2与运算符(双目操作符)

3.3或运算符(双目操作符)

四. 逻辑运算符的特点——短路


一. 关系操作符

        C语言用于比较的表达式,称为关系表达式,里面运用的运算符就称“关系运算符”,主要有下面6个:

  • <  小于运算符
  • >=  大于等于运算符
  • <=  小于等于运算符
  • ==  相等运算符
  • != 不相等运算符

关系表达式通常返回0或者1,表示真假 。关系表达式常用于if或while结构。(if:https://blog.youkuaiyun.com/wait___wait/article/details/134805824?spm=1001.2014.3001.5502)

(while:https://blog.youkuaiyun.com/wait___wait/article/details/135158422?spm=1001.2014.3001.5502)

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

20 > 12//返回1

12 > 20//返回0

printf("%d", 2 == 2);//打印1

        注意1:相等运算符==与赋值运算符是两个不一样的运算符,不能混淆。

有时候,可能会不小心写出下面的代码,它可以运行,但很容易出现意料之外的结果。(赋值运算符:https://blog.youkuaiyun.com/wait___wait/article/details/135242898?spm=1001.2014.3001.5502)

if (x = 3)...

上面示例中,意愿是x == 3,但不小心写成x = 3。这个式子表示对变量x赋值3,它的返回值是3,所以if判断总为真。

为了防止这种错误,可以将变量写在等号的右边。 这样的话,如果把==误写成=,编译器会报错,因为左操作符不能为常量

if (3==x)...

        注意2:多个关系运算符不宜连用

i  <  j  <  k 

上述示例中,连续使用两个小于运算符,是合法表达式,不会报错,但是通常达不到想要的效果,即不是保证变量 j 的值在 i 和 k 之间。因为关系运算符是从左到右计算,所以实际执行的是下面的表达式。

 (i < j)< k

上面式子中,i  <   j返回0或 1 ,所以最终是0或 1 与变量 k 进行比较。如果想要判断变量 j 的值是否在 i 和 k 之间,应该使用下面的写法。

i < j && j < k 

 如:

//输入一个年龄,如果年龄在18岁-36岁之间,就输出青年
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (18 <= age && age <= 36)
	{
		printf("青年\n");
	}
	return 0;
}
//输入34
//打印青年

而如果我们这样写

//输入一个年龄,如果年龄在18岁-36岁之间,就输出青年
#include<stdio.h>
int main()
{
	int age = 0;
	scanf("%d", &age);
	if (18 <= age <= 36)
	{
		printf("青年\n");
	}
	return 0;
}

这是因为,我们先拿18和age中存放的10比较,表达式18 <= 10为假,18 <= 10 的结果是0,再拿0和36 比较, 0 < 36 为真,所以打印了青年 。所以即使age是10的时候,也能打印青年。

二. 条件操作符(也叫三目操作符)

        与单目操作符和双面操作符类似,(单目操作符和双目操作符:https://blog.youkuaiyun.com/wait___wait/article/details/135242898?spm=1001.2014.3001.5502)三目操作符,需要接受三个操作数,形式如下:

exp1 ? exp2 :exp3

条件操作符的运算逻辑是:如果exp1为真,exp2计算,计算的结果是整个表达式的结果;如果exp1为假,exp3计算,计算的结果是整个表达式的结果。 

练习1:使用条件操作符表示下面代码的逻辑

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	if (a > 5)
	{
		b = 3;
	}
	else
		b = -3;
	printf("%d\n", b);
	return 0;
}
//改造后
#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d", &a);
	b = a > 5 ? 3 : -3;
	printf("%d\n", b);
	return 0;
}

练习2:使用条件表达式实现找两个数的较大值

#include<stdio.h>
int main()
{
	int a = 0;
	int b = 0;
	scanf("%d %d", &a, &b);
	int m = a > b ? a : b;
	printf("%d\n", m);
	return 0;
}

 三. 逻辑操作符:&&,||,!

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

  • !:逻辑取反运算符(改变单个表达式的真假)
  • &&:与运算符,就是并且的意思(全真则真,有假则假)
  • ||:或运算符,就是或者的意思(有真即真,全假即假)

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

3.1逻辑取反运算符!(单目操作符)

比如,我们有一个变量叫flag,如果flag为假,要做一个事情:

#include<stdio.h>
int main()
{
	int flag = 0;
	if (!flag)//if(flag == 0)
	{
		printf("do something\n");
	}
	return 0;
}

如果flag为真,!flag就是假,如果flag为假,!fag就是真,所以上面的代码的意思就是flag为假,执行 if 语句中的代码。

3.2与运算符(双目操作符)

        &&就是与运算符,使用方式是  a && b ,&&两边的表达式都是真的时候,整个表达式才为真,只要有一个是假,则这个表达式为假。(全真即真,有假即假)

比如:我们说月份3到5月是春天

#include<stdio.h>
int main()
{
	int month = 0;
	scanf("%d", &month);
	if (month >= 3 && month <= 5)//这里表达的意思就是month既要大于等于3,又要小于等于5,必须同时满足
	{
		printf("春季\n");
	}
}

3.3或运算符(双目操作符)

         ||运算符是或者的意思,使用方式是 a || b  。||两边的表达式只要有一个是真,整个表达式就是真,两边表达式都为假的时候,才为假。(全假则假,有真即真)

比如:我们说一年中,月份是12月或者1月或者2月是冬天

#include<stdio.h>
int main()
{
    int month = 0;
    scanf("%d", &month);
    if(month == 12 || month ==1 || month ==2)
    printf("冬季\n");
    return 0;
}

 练习:闰年的判断

输入一个年份year,判断year是否是闰年

闰年的判断规则:

  1. 能被4整除并且不能被100整除的是闰年
  2. 能被400整除的是闰年
#include<stdio.h>
int main()
{
	int year = 0;
	scanf("%d", &year);
	if ((year / 4 == 0 && year / 100 != 0) || (year / 400) == 0)
	{
		printf("%d是闰年\n", year);
	}
	else
		printf("%d不是闰年\n", year);
	return 0;
}

四. 逻辑运算符的特点——短路

        C语言逻辑运算符总是先对左侧的表达式求只,再对右边的表达式求值。如果左边的表达式满足逻辑运算符的条件,就不再对右边的表达式求值,这种情况称为“短路”。

如前面代码:

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

        表达式中的&& 的左操作数是month >= 3,右操作数 month <= 5,当左操作数month >= 3 的结果是0的时候,即便不判断 month <= 5 ,整个表达式的结果也是0(不是春季)。

所以,对于 && 操作符来说,左边操作数的结果是0的时候,右边操作数就不再执行。(遇到假停)

结合前面的代码,来讨论||的短路:

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

        如果month == 12,则不再判断month是否等于1或者2,整个表达式的结果也是1(是冬季)。

所以,||操作符的左操作数的结果不为0时,就无需执行右操作数。(遇到真停) 

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

(前置++和后置++:https://blog.youkuaiyun.com/wait___wait/article/details/135242898?spm=1001.2014.3001.5502)

练习:阅读代码,计算代码输出的结果

#include<stdio.h>
int main()
{
	int i = 0, a = 0, b = 2,c =3, d = 4;
	i = a++ && ++b && d++;//该表达式是逻辑表达式,&&操作符会短路:遇到假停。
	//a++先使用再加1,返回0后a=1,返回值0为假,后边的操作数不再执行,
	printf("a=%d b=%d c=%d d=%d i=%d", a, b,c, d, i);
	return 0;
}

运行结果: 

​


#include<stdio.h>
int main()
{
	int i = 0, a = 0, b = 2,c =3, d = 4;
	i = a++ || ++b || d++;// ||操作符会短路:遇到真停。
	//a++先使用再加1,返回0后a=1,程序继续执行
	// ++b先加1后使用,b+1=3后返回1,返回值为真,后边的操作数不再执行,
	printf("a=%d b=%d c=%d d=%d i=%d", a, b,c, d, i);
	return 0;
}

​


欢迎斧正!!!

期待你的​

​

STMicroelectronics 系列:STM32G4 系列_(11).STM32G4系列编程基础 通过本文,我们学习了如何在 STM32CubeIDE 中搭建开发环境,创建新项目,配置 GPIO、定时器和 ADC 外设,并编写相应的代码示例。这些基础知识将帮助你快速上手 STM32G4 系列的编程。希望本文对你有所帮助,祝你编程愉快! 阅读详情

相关推荐

R语言实战:Scheirer–Ray–Hare检验在非正态重复测量数据分析中的应用

本文详细介绍了当重复测量数据不满足正态分布假设时,如何利用R语言中的Scheirer–Ray–Hare检验进行数据分析。该检验作为非参数方法,无需数据服从正态分布或方差齐性,适用于分析组间差异、时间效应及其交互作用。文章通过实战案例,从环境搭建、数据准备、检验执行到结果解读与可视化,提供了完整的操作指南,帮助研究者有效处理心理学、医学等领域的复杂实验数据。

salt9的博客 780

C语言判断是否相等运算符

在数学运算中,描述两个数值相等,使用的符号是“=”,我也经常称这个字符为“等号”;例如,可以描述,如果a >b而且b > c,则 a > c;这就是一个数学式子的描述。但是,在C语言中,等号“=”用于做“赋值操作”,例如: inta = 10; 就是把10这个数值赋给变量a,那么,变量a中存储的数据就是10这个数值。那么,C语言中,描述两个对象相等,使用的符号是“= =”,就是两个等号“=”相连,用于判断连个对象是否相等。例如 a = = b表达式,就是判断 a与b的值是否相等,则..

LC的专栏 2万+

多尺度Transformer+特征融合新范式,算力减半精度猛增

在大模型时代,多尺度特征融合与Transformer架构的结合正成为研究热点。多尺度特征融合能够捕捉数据在不同尺度上的关键信息,而Transformer架构凭借其强大的并行处理能力和对长距离依赖的建模能力,为复杂数据处理提供了新的思路。这种结合在处理多模态数据时展现出巨大潜力。

Tulingxueshu的博客 1057

C语言:比较两个字符串是否相等

​ 讲解上面的程序: 定义了一个char(字符型)的指针变量str1,并且初始化为 "abc" 定义了一个char(字符型)的指针变量str2,并且初始化为 "abc" 通过strcmp进行比较两个字符串是否相同,如果相同返回0 ​......

xuetudexintai的博客 1万+

TensorRT-LLM环境配置避坑指南:从安装到实战

本文是一份详尽的TensorRT-LLM环境配置避坑指南。文章重点解析了从Python、CUDA、PyTorch版本选择,到解决mpi4py安装这一核心难题的完整流程,并提供了经过验证的稳定版本组合与实战排错方案,帮助开发者高效部署大语言模型推理优化环境。

a0b1c2d3的专栏 983

【OpenClaw从入门到精通】第60篇:多智能体协同实战——用“龙虾”搭建你的数字员工团队(2026企业版)

2026年AI Agent企业落地的核心趋势,正从“单Agent单兵作战”转向“多智能体协同组网”。本文以全球开发者先锋大会“百虾大战”真实案例为蓝本,深度拆解OpenClaw多智能体协同的技术内核——三层解耦架构(模型层-技能层-网关层),系统搭建包含项目经理、架构师、执行者、质量把关者的4大核心Agent团队。通过三种主流协作架构对比、全链路配置代码实操、故障自愈实战演练,结合电商新品上架虚拟场景全流程演示,解决企业多Agent部署中的权限隔离、任务协同、运维自治三大核心痛点。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 767

C语言怎么才能让末尾没有多余的空格_C语言干货分享

各位DUTer们,全国计算机等级考试不久将至,不知各位同学复习得怎么样了?面对计算机二级C语言的程序操作题是不是无从下手啊?大家不要慌,我们在这里给大家准备了满满的干货。相信DUT们在家里看完一定会收获满满的,面对C语言也将充满了信心!计算机二级c语言考试由单项选择题 40 分(含公共基础知识部分 10 分)。操作题 60 分(包括程序填空题、程序修改题及程序设计题)构成,以下是操作题重...

weixin_39945531的博客 7865

C#与海康威视工业相机结合OpenCV与WPF:打造高效的机器视觉应用程序

本文介绍了基于C#、海康威视工业相机SDK和OpenCV的机器视觉应用开发方法。首先配置开发环境,包括海康SDK、OpenCvSharp和WPF项目设置。重点阐述了如何通过SDK初始化相机、获取视频流,并将YUV数据转换为OpenCV可处理的Mat格式进行图像处理(如边缘检测)。同时展示了如何用WPF实现界面交互和实时图像显示。该方案为工业自动化、质量检测等场景提供了高效的技术实现路径,结合了海康相机的高性能采集、OpenCV的强大算法和WPF的交互优势,具有较高的实用价值。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1496

c语言ascii码表_新手小白整理C语言笔记备忘,带你十分钟理解C语言

一.C语言数据类型1.基本类型:整型、浮点型(单精度、双精度)、字符型和枚举类型;2.构造类型:数组类型、结构体类型和共用体类型;3.指针类型;4.空类型。二.数值数据的表示1.整数:十进制整数、八进制整数(012)、十六进制整数(0xf1)2.整数的存储空间:2个字节,即16个二进制位;整数的取值范围-2[15]~2[15]-1,即-32768(1000 0000 0000 0000)~3276...

weixin_39959569的博客 460

Android Camera驱动开发工程师面试指南:技术深度与实战准备

摘要:上海移远通信招聘Android Camera驱动开发工程师,主要负责Camera传感器驱动开发维护、高通/展锐平台底层开发及技术预研。岗位要求1年以上嵌入式开发经验,精通Camera传感器驱动调试,熟悉高通平台Camera架构及Android HAL框架。具备HAL开发、算法集成或车载/支付行业经验者优先。工作内容以Driver/HAL开发为主,需具备硬件接口评估能力。该职位接受Linux/单片机背景人员转型。

郑伟强dev的专栏 280

算法真的是个很有用的东西,通过python或者golang实现对N张图片的自动排版,每张图片的长和宽都不一样,有的是横图,有的是竖图,最终需要生成一张完整的矩形图片

算法真的是个很有用的东西,通过python或者golang实现对N张图片的自动排版,每张图片的长和宽都不一样,有的是横图,有的是竖图,最终需要生成一张完整的矩形图片。

代码讲故事 503

C语言中两个字符串比较是否相等

C语言中两个字符串比较是否相等

qq_61166353的博客 1万+

接入 AI 之后,为什么测试和排障还是没有真正变快?

如果你们准备做平台型 AI,不要先从聊天入口开始想。先把真实数据采上来;再把链路、版本、快照、报告这些核心对象建稳;再把历史沉淀、反馈、检索能力补齐;最后再让 AI 围绕这些对象去工作。这样做出来的 AI,才更容易从“看起来聪明”走向“真正省时间”。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 526

【C语言之操作符2】

万能操作符

2301_78107465的博客 1691

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

C语言进阶(2)—————操作符详解

8进制的数字每一位是 0~7 的,0~7 的数字,各自写成2进制,最多有3个2进制位就足够了,比如7的二进制是111,所以在2进制转8进制数的时候,从2进制序列中右边低位开始向左每3个2进制位会换算一个8进制位,剩余不够3个2进制位的直接换算。整数的2进制表示方法有三种,即原码、反码和补码,有符号整数的三种表示方法均有符号位和数值位两部分,2进制序列中,最高位的1位是被当做符号位,剩余的都是数值位。其实二进制也是一样的:2进制中满2进1,且每一位都是0~1的数字组成,那么 1101 就是二进制的数字了。

Ken7__0102的博客 794

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

C语言—操作符2

此时表达式中相邻的操作符为乘法操作符和除法操作符,两个操作符的优先级相同,可以考虑结合性,乘法操作符和除法操作符的结合性是从左往右计算,所以表达式的结果为1;表达式中含有加法操作符和乘法操作符,由于乘法操作符的优先级比加法操作符的优先级高,所以表达式优先计算乘法操作符的两个操作数,后计算表达式的加法操作符,结果为17。表达式先执行a++表达式,a=a+1=2,再执行表达式b--,b=b-1=4,最后执行c=a+b=6,所以表达式最后的结果为6,输出打印:2,4,6,6。

2502_91437895的博客 652

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

C语言——操作符详解2

C语言操作符2

YT54936543的博客 1607

C语言:操作符详解2

我们来看例子使用逗号表达式也可以用来解决以下场景。

2402_84021550的博客 1107

c语言常用操作符(2)

​ 移位操作符分为 注:移位操作符的操作数只能是整数,同时移位操作符移动的是存储在内存中的二进制位(也就是补码) 同时移位操作符不要移动负数位,这个是标准未定义的。 1.

mljy.博客 2035

【C语言】操作符2(含操作符的应用)

定义:结构体的定义有两种方法:1、在创建结构体的时候在最后直接写出这个变量,注意后面的分号!!!2、和定义结构体有一点类似,使用struct关键字然后加上一个名字,然后再加上这个变量的 名字。初始化:结构体的初始化和数组差不多,也是使用大括号。第一个初始化就会按照结构体中的数据顺序的初始化,即第一个"zhangsan"就是name的,然 后20就是age的了,第二种就是指定初始化,这个就在要初始化的那个数据加.即可。

2302_81083101的博客 1349

c语言-操作符2

本篇文章介绍c语言中单目操作符、逻辑操作符、条件操作符、逗号表达式、下标引用操作符等。

pyc68的博客 572

操作符讲解2---C语言

C语言中重要的操作符知识。

muwithxi的博客 1089

【C语言所有操作符详解2】

表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度一般就是int的字节长度,同时也是CPU的通用寄存器的长度。如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。例如,在算术运算中,如果操作数的类型不一致,编译器会将较低等级的类型转换为较高等级的类型,以便进行运算。代码1在计算的时候,由于*比+的优先级高,只能保证,*的计算是比+早,在右操作数之前还是之后求值,所以结果是不可预测的,是有歧义 的。

caojunjia的博客 267

【C语言】 操作符详解(2)

紧接上文,我们将继续进行操作符的讲解。

m0_71731682的博客 1967

c语言操作符2

c语言操作符2

nie2459010516的博客 328

C语言初阶————操作符2

区别sizeof和strlen:①sizeof是操作符,不是函数 ②strlen是求字符串长度的函数,不是操作符。(一)单目操作符:只有一个操作数的操作符,上次介绍的基本上都是双目操作符(需要两个操作数)。例题:利用操作符使一个数的二进制的指定为取反,并再用操作符还原。(五)逗号表达式:用逗号隔开多个表达式,结果为最后一个表达式结果。表达式1为真则执行表达式2,如果表达式1为假则执行表达式3。前置--、++:先--或++,再使用。后置--、++:先使用,再--或++最后的结果为最后执行的表达式结果。

2401_83008139的博客 354
上一篇: C语言之操作符1
下一篇: C语言之printf浅析
大力初奇迹
博客等级 码龄3年 1294粉丝 54原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值