C语言操作符(上)
文章目录一、操作符的含义二、操作符的分类三、运算符功能介绍1. 算术操作符2. 关系操作符3. 逻辑操作符**▲ 逻辑操作符的短路现象**4. (复合)赋值操作符5. 单目操作符6. 条件操作符7. 逗号表达式8.下标引用操作符9.函数调用操作符10.结构成员访问操作符一、操作符的含义操作符(Operator)是一种告诉编译器执行特定的数学或逻辑操作的符号。操作符又称为运算符作为运算对象的变量或者常量称为操作数。操作符左边的操作数称为第一操作数或者左操作数操作符右边的操作数称为第二操作数或者右操作数。操作符同时对两个操作数进行运算的称为双目操作符操作符只对一个操作数进行运算的称为单目操作符。二、操作符的分类●算术操作符、-、*、/、%●移位操作符、●位操作符:、|、^●赋值操作符、、-、*、/、%、、、、|、^●单目操作符!、、- -、、*、、-、~、sizeof、(类型)●关系操作符、、、、、!●逻辑操作符、||●条件操作符? :●逗号表达式,●下标引用操作符[ ]●函数调用操作符( )●结构成员访问操作符.、-三、运算符功能介绍1. 算术操作符(1) (加法运算符)实现两个操作数的加法运算是一个双目操作符。例如inta2;intb3;intcab;//实现两个整型变量的加法运算printf(%d\n,c);//结果为5printf(%d\n,a6);//变量和常量相加结果为8printf(%d\n,34);//常量和常量相加结果为7当只有一个右操作数的时候就是正号它就是一个单目操作符。intn10;printf(%d\n,n);//结果为10同样的 -(减法操作符)实现两个操作数的减法运算。当 - 只有一个右操作数的时候它就是负号就是一个单目操作符。(2) *(乘法操作符)实现两个操作数的乘法运算。键盘上通过shift8键敲出来。*是一个双目操作符。inta3;intb7;printf(%d\n,a*b);//结果为21/(除法操作符)实现两个操作数的除法运算。是一个双目操作符。printf(%d\n,10/5);//打印结果为2printf(%d\n,5/2);//打印结果为2printf(%lf\n,3.0/2);//打印结果为1.500000printf(%lf\n,3.0/2.0);//打印结果为1.500000注意在做两个操作数的除法运算时当/(除号)两边都是整型类型的操作数时则得到的结果只会是整型。比如上面的第二行5/2的结果本应该是2.5但是只会保留整数部分的2而舍弃小数部分。所以以%d的形式打印出的结果就为2。当/(除号)两边至少有一个是浮点数类型的操作数时则就会计算出小数的结果。比如上面的3.0/2、3.0/2.0得到的结果就都是1.5以%lf的形式打印会在屏幕上打印出1.500000(注意以%lf的形式打印小数点后默认会打印出6位)(3) %(取余(模)操作符)用于求两个整型相除以后的余数是一个双目操作符。%运算符要求两个操作数必须是整数计算得到的余数也是整数。printf(%d\n,7%2);//打印结果为1printf(%d\n,14%3);//打印结果为2printf(%d\n,3%5);//打印结果为3注意当被除数小于除数时得到的余数就是被除数。2. 关系操作符关系操作符都是双目操作符。特别多的会用在分支语句或循环语句的条件部分。intage10;if(age18)printf(成年了\n);elseprintf(未成年\n);运行结果charch[10]abcdefg;inti0;while(ch[i]!\0){printf(%c ,ch[i]);ii1;}运行结果上面只举了两个例子其实对于关系操作符很简单。这里只是做简单的介绍(大于)、(大于等于)、(小于)、(小于等于)、(等于)、!(不等于)。(注意在判断是否是等于关系时两个等号才是判断相等而一个等号是赋值。不要混淆)对于关系运算的结果只有0和1两种结果0表示假1表示真。printf(%d\n,32);//打印结果是1printf(%d\n,3!3);//打印结果是0在C语言中非0表示真0表示假。3. 逻辑操作符(1) 逻辑与操作符双目操作符。顾名思义就是并且的意思形式是a ba和b可以是常量、变量或者表达式。当两边的a和b至少有一个为假时整个表达式的结果就为假当两边的a和b都为真时整个表达式的结果才为真printf(%d\n,(32)(79));//打印结果为1printf(%d\n,(32)(3!2));//打印结果为0printf(%d\n,(42)(58));//打印结果为0(2) ||逻辑或操作符双目操作符。逻辑或就是或者的意思。形式为a || ba和b可以是常量、变量或者表达式。当||两边的a和b至少有一个为真时整个表达式的结果就为真当||两边的a和b都为假时整个表达式的结果才为假printf(%d\n,(32)||(79));//打印结果为1printf(%d\n,(76)||(4!4));//打印结果为1printf(%d\n,(42)||(58));//打印结果为0▲ 逻辑操作符的短路现象(1) 逻辑与短路对于表达式a b当左边的a已经是假了那右边的b就不会判断了。因为左边的a已经为假则整个表达式的结果就为假。(2)逻辑或短路逻辑或短路也是相似的对于表达式a || b当||左边的a已经是真了那右边的b就不会判断了。因为左边的a已经为真则整个表达式的结果就为真。对于逻辑操作符的短路现象就是仅仅根据左操作数的结果就能知道整个表达式的结果而不再对右操作数进行计算这就是短路现象。4. (复合)赋值操作符(1) (赋值操作符)赋值运算是将赋值号右边的值赋给左边的变量。赋值号右边的值可以是常量、变量或者表达式而赋值号左边必须是一个变量。(2) 复合赋值运算符(加等于)、-(减等于)、*(乘等于)、/(除等于)、%(模等于)● (加等于)把右操作数加上左操作数的结果再赋值给左操作数。举一个例子就明白了inta5;a3;//等价于aa3printf(%d\n,a);//打印结果为8定义了一个整型变量a并初始化其值为5。a3的意思就是aa3将变量a的值加上常量3后的结果赋给变量a则a的值变为了8。复合赋值操作符其实就是算术运算符结合赋值运算符的一种简化。上面的其他复合赋值操作符也是相应的算术运算符结合赋值操作符的意思。赋值操作符及复合赋值操作符都是双目操作符因为他们都有两个操作数。5. 单目操作符(1) !(非)逻辑反操作符。通俗来说就是将真变为假假变为真。printf(%d\n,32);//打印结果为1printf(%d\n,!(32));//打印结果为0(2) 操作符也叫自增运算符分为前置和后置。① 前置#includestdio.hintmain(){inta1;intba;printf(a %d\n,a);printf(b %d\n,b);return0;}运行结果由上面的代码及结果可知前置的作用是先将变量的值加1以后再使用变量的值。就像上面的例子a可以理解为先让变量a自增1(aa1)然后再使用a的值此时a的值为2(先加1后使用)。你也可以理解为a这个表达式的值就为2当执行完a这个表达式后会使a的值自增1#includestdio.hintmain(){inta1;printf(a %d\n,a);printf(a %d\n,a);return0;}运算结果② 后置#includestdio.hintmain(){inta1;printf(a %d\n,a);printf(a %d\n,a);return0;}运行结果后置的意思就是先使用变量的值然后再让变量的值自增1(先使用后加1)。就像上面的代码a是先使用a的值a的值为1所以a这个表达式的值为1。当a这个表达式执行完毕后会让a的值自增1(aa1)。你可以理解为a这个表达式的值就为原来a的值执行完这条语句后a的值自增1。(3) - -操作符:也叫自减操作符也是分为前置- -和后置- -。用法和意思和前面的操作符类似#includestdio.hintmain(){intn4;//前置--printf(--n %d\n,--n);//先让n自减1然后再使用n的值printf(n %d\n,n);//后置--printf(n-- %d\n,n--);//先使用n的值然后让n自减1printf(n %d\n,n);return0;}运行结果注意无论是前置、- -或是后置、- -到表达式执行完毕后都会使变量的值自增1或者自减1。(4) 取地址操作符顾名思义就是取出变量的地址。#includestdio.hintmain(){intn1;n;//取出变量n的地址int*pn;//将变量n的地址存到指针变量p中return0;}(5) *解引用操作符用于指针(地址)获取指针所指向单元的内容。用法如下#includestdio.hintmain(){inta10;int*pa;*p20;printf(a %d\n,a);//打印结果为20return0;}有了*操作符就多了一种修改变量值的途径。可以通过解引用操作符对指针进行解引用间接的访问指针所指向对象的内容。(6) sizeof操作符用于求一个变量或者类型所占空间的大小单位是字节。#includestdio.hintmain(){intb10;printf(%d\n,sizeof(b));printf(%d\n,sizeofb);printf(%d\n,sizeof(int));return0;}sizeof操作符求变量的大小时后面的( )可以省略。还需要注意的是sizeof操作符中放的如果是表达式则表达式是不会计算的但是会判断表达式最终结果的数据类型由此计算出最终结果的大小(单位字节)。#includestdio.hintmain(){inta10;charb\0;printf(%d\n,sizeof(a10));printf(%d\n,sizeof(bab));return0;}运行结果(7) (类型)强制类型转换。作用就是将表达式的类型转换为括号中类型名指定的数据类型。#includestdio.hintmain(){inta10;floatb3.14f;a(int)b;//将浮点型变量b强制类型转换成整型赋给aprintf(a %d\n,a);//打印结果为3return0;}上面的变量a是一个整型而变量b是一个浮点型数据如果直接将b的值赋给a则类型就不兼容。所以将b强制类型转换成整型(去掉小数点后的值保留整数部分)再赋给a。用法是在变量或者表达式的前面加上一个( )( )内注明要转换的类型。强制类型转换是将所需变量或者表达式的值转换为我们需要的类型不会改变该变量或表达式的值和类型。在后面的学习中会遇到更多强制类型转换的代码这里先做一个大概的了解。6. 条件操作符? :(条件操作符)。条件操作符是C语言中唯一的一个三目操作符意思就是他有三个操作数。#includestdio.hintmain(){inta0;intb0;printf(请输入a和b的值);scanf(%d %d,a,b);intcab?a:b;printf(%d\n,c);return0;}运行结果条件操作符的格式表达式1 表达式2 : 表达式3① 当表达式1的结果为真(非0)时则计算表达式2表达式2的结果就为整个表达式的结果。② 当表达式1的结果为假(0)时那么就计算表达式3表达式3的结果就为整个表达式的结果。上面的3个表达式可以是变量、常量或者表达式。#includestdio.hintmain(){inta0;intb0;printf(请输入a和b的值);scanf(%d %d,a,b);intcab?a-2:b3;printf(%d\n,c);return0;}运行结果7. 逗号表达式表达式1表达式2表达式3…逗号表达式也是一个操作符。用,将各个表达式分隔开(英文半角状态下的逗号)。运算法则是按从左往右的顺序计算各个表达式。#includestdio.hintmain(){intx7;inty9;intm12;intn1;inta(xy1,ym,mn,nxym);printf(x %d y %d m %d n %d a %d,x,y,m,n,a);return0;}运行结果通过上面的代码及运行结果第八行的代码因为( )的优先级高于赋值操作符()所以会先计算( )里面的逗号表达式因为逗号表达式是左结合性所以会从左往右顺序计算各个表达式最后一个表达式的结果就是整个表达式的结果。注意上面第八行的逗号表达式是用( )整体括起来的然后再赋值给变量a。如果没有打( )就是另外一种情况#includestdio.hintmain(){intx7;inty9;intm12;intn1;inta0;axy,ym,mn,nxym;printf(x %d y %d m %d n %d a %d,x,y,m,n,a);return0;}运行结果上面第九行的代码也是逗号表达式只是这里没有对逗号表达式整体打括号因为逗号表达式是C语言中优先级最低的运算符所以相比较于逗号表达式赋值操作符的优先级高就会将xy计算后的值赋值给a而不是将最后一个表达式的结果赋给a。除非像上面一样逗号表达式整体加了括号以后(a(xy,ym,mn,nxym))才会将最后一个表达式的结果赋给a。这里虽然没有整体打括号但由于逗号表达式的左结合性上面第九行的逗号表达式会从左往右依次计算各个表达式。通过上面的输出结果就可以看出来了。8.下标引用操作符[ ]下标引用操作符。是在数组中使用的是一个双目操作符用于访问数组中的元素。#includestdio.hintmain(){intarr[10]{1,2,3,4,5,6,7,8,9,10};inti0;for(i0;i10;i){printf(%d ,arr[i]);}return0;}下标引用操作符也是一个双目操作符[ ]左边的数组名和[ ]中的下标就是它的操作数。其实两个操作数的位置是可以交换的也就是数组名放在[ ]中下标放在[ ]的左边这种也是可以的。9.函数调用操作符( )函数调用操作符在调用函数时函数名后面的( )就是函数调用操作符。( )的操作数是函数名、参数。而且函数调用操作符最少有一个操作数那就是函数名因为有的函数是没有参数的。#includestdio.hintAdd(intx,inty){returnxy;}voidtest(){printf(I am xionger!);}intmain(){intx10;inty20;printf(%d\n,Add(x,y));//这里的()就是函数调用操作符test();//这里的()就是函数调用操作符return0;}10.结构成员访问操作符(1) 结构体成员的直接访问就可以使用.操作符。使用方法是结构体变量.成员名。#includestdio.hstructStu{charname[20];charsex[12];intage;charid[10];};intmain(){structStus1{张三,男,20,202400101};printf(%s %s %d %s\n,s1.name,s1.sex,s1.age,s1.id);//直接访问return0;}运行结果(2)结构体成员的间接访问可以使用-操作符通过结构体指针来实现对结构体成员的间接访问。#includestdio.hstructStu{charname[20];charsex[12];intage;charid[10];};intmain(){structStus1{张三,男,20,202400101};structStu*ps1;printf(%d %s %s %s\n,p-age,p-sex,p-name,p-id);//间接访问return0;}运行结果上面只是初步了解这些操作符的意思和使用方法在后期的学习中还会更深入的接触和学习到上面的众多操作符。上面还有关于位的众多操作符和运算符的优先级还没有学习我们放到下一章节学习。

相关新闻

四款企业AI知识库深度评测

四款企业AI知识库深度评测

四款企业AI知识库深度评测佑桥、飞书、语雀、蓝凌,谁更适合你的企业?2026年,企业AI知识库赛道百花齐放。打开搜索引擎,你会发现市面上至少有几十款产品在争夺企业IT决策者的注意力。但如果要选出四款最具代表性、技术路线最差异化…

2026/7/24 22:52:07 阅读更多 →
使用重新设计的 AutoOps 更快地进行 Elasticsearch 问题排查

使用重新设计的 AutoOps 更快地进行 Elasticsearch 问题排查

作者:来自 Elastic Ori Shafir 及 Arnon Stern AutoOps 为 Elastic Cloud Hosted 部署和 Cloud Connect 集群引入了更清晰的严重级别、更新后的页面布局以及更简单的问题排查流程。 通过实时问题检测和可执行的优化建议,简化你的 Elasticsearch 运维&am…

2026/7/24 22:52:07 阅读更多 →
不到 5 分钟完成本地部署:Jina embedding 模型现已支持本地部署

不到 5 分钟完成本地部署:Jina embedding 模型现已支持本地部署

作者:来自 Elastic Scott Martens 全部 28 个 Jina AI 模型(包括 reranker),现已提供可直接部署的 Docker 容器,无遥测数据收集,无需许可证服务器。可直接兼容 OpenAI、Cohere、Voyage AI 和 Elastic Infer…

2026/7/24 22:52:06 阅读更多 →

最新新闻

实用高效的Windows驱动管理神器:Driver Store Explorer完全指南

实用高效的Windows驱动管理神器:Driver Store Explorer完全指南

实用高效的Windows驱动管理神器:Driver Store Explorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 您是否曾因Windows系统盘空间不足而烦恼?是否发现…

2026/7/24 23:01:09 阅读更多 →
Centos7 编译安装Cmake+ffmpeg

Centos7 编译安装Cmake+ffmpeg

1、系统准备安装好Centos7.9,并打好系统补丁,安装一些常用工具,关闭防火墙,yum -y update yum -y install git yum -y install vim yum -y install unzip yum -y install net-tools yum -y install wget yum -y install openssl-d…

2026/7/24 23:01:09 阅读更多 →
Legacy iOS Kit终极指南:让经典iOS设备重获新生的完整工具链

Legacy iOS Kit终极指南:让经典iOS设备重获新生的完整工具链

Legacy iOS Kit终极指南:让经典iOS设备重获新生的完整工具链 【免费下载链接】Legacy-iOS-Kit An all-in-one tool to restore/downgrade, save SHSH blobs, jailbreak legacy iOS devices, and more 项目地址: https://gitcode.com/gh_mirrors/le/Legacy-iOS-Kit…

2026/7/24 23:01:09 阅读更多 →
电脑机房用成品——名词解释

电脑机房用成品——名词解释

目录 红黑电源隔离插座 PDU(电源分配单元) 电源ac和dc MTBF:平均无故障时间 关于标准机箱、机柜 红黑电源隔离插座 红黑电源隔离插座简称“红黑插座”,是中国国内达到国家保密标准GB2099.3-1997《红黑电源滤波隔…

2026/7/24 23:01:09 阅读更多 →
RunnableSequence(SimpleSequentialChain 的现代替代品)

RunnableSequence(SimpleSequentialChain 的现代替代品)

前置重要结论SimpleSequentialChain 已经被官方标记 Deprecated(废弃) LangChain v0.1 推荐彻底迁移到 RunnableSequence(LCEL 管道 |),它就是新版替代 SimpleSequentialChain 的标准实现。 旧版:SimpleSeq…

2026/7/24 23:01:09 阅读更多 →
KeyboardChatterBlocker:彻底告别键盘连击问题的终极解决方案

KeyboardChatterBlocker:彻底告别键盘连击问题的终极解决方案

KeyboardChatterBlocker:彻底告别键盘连击问题的终极解决方案 【免费下载链接】KeyboardChatterBlocker A handy quick tool for blocking mechanical keyboard chatter. 项目地址: https://gitcode.com/gh_mirrors/ke/KeyboardChatterBlocker 你是否曾经遇到…

2026/7/24 23:00:09 阅读更多 →

日新闻

用Highcharts 创建可拖拽三维散点立方体3D图表

用Highcharts 创建可拖拽三维散点立方体3D图表

该案例基于Highcharts scatter3d 三维散点图实现空间立方体散点可视化,核心特色:三维 X/Y/Z 三轴空间,所有散点分布在 0~10 立方体空间内;散点使用径向渐变实现立体 3D 圆球质感;支持鼠标 / 触屏拖拽画布,…

2026/7/24 0:00:29 阅读更多 →
AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口

AppCertDlls:进程创建路径上的 DLL 入口 AppCertDlls 位于 HKLM\System\CurrentControlSet\Control\Session Manager\AppCertDlls。本文的程序功能是只读列出这个键在 64 位和 32 位注册表视图中的全部值,并显示每条值的来源、名称、类型和可安全显示的数…

2026/7/24 0:00:29 阅读更多 →
我的编程之路:第一篇博客

我的编程之路:第一篇博客

大家好,我是一名编程初学者,同时这也是我编程学习之路上的第一篇博客。在这里,我想要向大家介绍我的一些想法和规划。a.自我介绍我是一个刚刚接触编程的新手,目前在学习c语言,我对编程世界充满了强烈的好奇。当然&…

2026/7/24 0:00:29 阅读更多 →

周新闻

Go语言静态资源打包方案对比与实践指南

Go语言静态资源打包方案对比与实践指南

1. 项目背景与核心需求在Go语言开发中,我们经常需要处理静态资源文件的打包问题。无论是Web应用的模板文件、前端资源,还是配置文件、证书等,都需要随程序一起分发。传统做法是将这些文件与编译后的二进制文件放在同一目录下,但这…

2026/7/24 3:59:20 阅读更多 →
Go语言实现高性能LDAP认证服务的架构与实践

Go语言实现高性能LDAP认证服务的架构与实践

1. 项目背景与核心价值LDAP(轻量级目录访问协议)作为企业级身份认证的黄金标准,已经服务了超过80%的财富500强公司。我在金融科技领域实施统一认证体系时,发现传统Java方案存在启动慢、内存占用高等痛点。而Go语言凭借其协程并发模…

2026/7/24 1:23:39 阅读更多 →
【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

【AI面试官实战指南】:用ChatGPT模拟10类高频技术岗面试,3天提升应答精准度92%

更多请点击: https://intelliparadigm.com 第一章:AI面试官实战指南的核心价值与适用场景 AI面试官并非替代人类HR的“黑箱工具”,而是以可解释、可审计、可迭代的方式,赋能招聘全链路的关键基础设施。其核心价值在于将主观经验沉…

2026/7/24 18:52:18 阅读更多 →

月新闻