C语言操作符详细讲解
前言
本次博客一定会让刚刚学习C语言小白有所收获
本次操作符讲解不仅分类还会有代码示例
好好看 好好学 花上几分钟就可以避免许多坑
1 操作符的基本使用
1.1操作符的分类
按功能分
算术操作符: + 、- 、* 、/ 、%
移位操作符: >> <<
位操作符: & | ^
赋值操作符: = 、+= 、 -= 、 *= 、 /= 、%= 、>>= 、&= 、|= 、^=
单⽬操作符: !、++、--、&、*、+、-、~ 、sizeof(类型)
关系操作符: > 、>= 、< 、<= 、 == 、 !=
逻辑操作符: && 、||
(三目操作符)条件操作符: ? :
逗号表达式: ,
下标引⽤: []
函数调⽤: ()
按性质分为 单目操作符 双目操作符 三目操作符
主要的区分是 单目为一个操作数 双目为两个操作数 三目操作符为三个操作数
1.2操作符的使用
1.21算术操作符
对于算术操作符来说,值得注意的点只有 / %
对于加减乘 任何数据都能实现,但是 除法
在遇到整数时,首先除数不能为0,其次除不尽是只会保留整数
比如 2 /1=2 1/2=0 5/3=1
当然如果是浮点数会保留的 1/2.0=0.5
如果是%(求模) 注意它只服务于整型数据取得的数为余数
大家看看代码呗

是不是 % 只能对整数有效
让大家看看结果

10/3只能保留3 10%3余下一个1
这里没有讲解 加减乘 大家可以自行操作,就是数学中的普通四则运算
1.22移位操作符
>> <<
移位操作符的操作数只能是整数
<< 左移操作符
移位规则:左边抛弃、右边补0
我们举两个例子来说明情况
注意整型在内存中的存储为补码,我们分别以 -1 与+1来进行左移操作
这是对一的左移
先画图

画的一般,但是能看
继续看-1的左移

我们看看代码

此时a 和 b的大小都变为2倍
>>右移操作符
位规则:⾸先右移运算分两种:
1. 逻辑右移:左边⽤0填充,右边丢弃
2. 算术右移:左边⽤原该值的符号位填充,右边丢弃
我们的编译器一般都是算术右移
直接看代码
#inlcude<stdio.h>
int main()
{int a = 2;int b = -2;printf("%d", a >> 1);printf(" %d", b >> 1);return 0;
}
看结果

所以左移操作符的作用是 在不溢出的情况下,使原有的数*2
右移操作符的作用是 在不溢出的情况下,使原有的数/2
1.23位操作符
& 按位与 | 按位或 ^ 按位异或 ~按位取反
位操作 这里只讲简单的原理即可
1& 按位与
画图吧

2 | 按位或
看图

3^ 按位异或
看图

4按位取反
看图

注意一下再char类型中是如此 它的范围为 -128~127
而short类型的 它的范围为-32768~32767
我们可以看看 它的-32768的原码为
1000 0000 0000 0000
值得注意的是它的补码也是 1000 0000 0000
ok 上述代码都可以通过代码实现

是不是对应上了
1.24赋值操作符:
= 、+= 、 -= 、 *= 、 /= 、%= 、>>= 、&= 、|= 、^=
其实这个没什么可讲的,就是赋值
看代码
int main()
{char a = 1;char b = 126;a = 28;//把28赋值给aa += 10;//a=a+10a -= 10;//a=a-10;a *= 10;//a=a*10;a /= 10;//a=a/10;a %= 10;//a=a%10;a >>= 10;//a=a>>10;a &= 1;//a=a&1;return 0;
}
1.25单⽬操作符
++ -- ! & sizeof()
前置++ --
是先++ --后使用
后置 ++ --
是先使用后++ --
!是使非0的值变为0 使0变为1
简单举例子就好
int main()
{int a = 0;int b = 1;int c = 1;if (++a)printf("++a是先加1在使用进入判断哦\n");if (!--b)printf("--b是先减去1在进入判断哦\n");if (c--)printf("c--是先使用才会减1哦\n");return 0;
}
看结果

& sizeof()
&作为单目操作符为去某个数据的地址与 双目操作符&按位与是不同的含义
sizeof()是计算某个数据所占的内存大小
看代码
int main()
{int a = 10;int* p = &a;*p = 20;//改变a的值int b = sizeof(p);//计算指针类型的大小int c = sizeof(b);//计算int类型的大小printf("%d %d %d ", a, b, c);return 0;
}

1.26关系操作符:
> 、>= 、< 、<= 、 == 、 !=
这其实更没有必要讲解l
其实就是数学里的比大小,如果成立返回1,不成立返回0
!=为不等于
看代码

所以懂了吗
1.27逻辑操作符
&& 、||
逻辑操作符也是一个很重要的操作符
&&逻辑与 (表达式1)&&(表达式2) 只有两个都为真时 整个式子才为真
||逻辑或 (表达式1)||(表达式2)只要一个为真时 整个式子就为真
给一个最简单的代码吧
int main()
{int a = 0 && 0;int b = 1 && 1;int c = 1 && 0;int a1 = 0 || 0;int b1 = 1 || 1;int c1 = 1 || 0;printf("%d %d %d",a,b,c);printf("%d %d %d", a1, b1, c1);return 0;
}
看结果

当然有注意点的
1两端其实可以是表达式的
2对于(表达式1)&&(表达式2)只要 表达式1为假 那么表达式二直接不运算,整个式子的值为0
3对于(表达式1)||(表达式2)只要 表达式1为真 那么表达式而同样不计算 ,整个式子的值就为1
1.28(三目操作符)条件操作符
(表达式1)? (表达式2):(表达式3)
如果表达式1为真则执行表达式1否者执行表达式2
很简单
看代码
int main()
{int a = 10;int b = 20;//三目操作符int c = 10 > 20 ? 10 - 20 : 10 + 20;int d = a>10?10:20;//注意后面的表达式只能是一个确切的值,不能是一个赋值表达式//a > b ? a + 20 : b =30;//errorprintf("%d %d %d %d", a, b, c, d);//还有一种用途,可以用在打印里头 条件打印printf(a > b ? "*" : "1");return 0;
}
1.29逗号表达式:
是从左到右依次执行代码,取最后一个表达式的值为返回值 看语法
(表达式1,表达式2,表达式3,表达式4,表达式5,表达式6······,表达式n)
, 只是一个小小的逗号可能还看不出什么,我们还是看代码说话
int main()
{int a = 10;int b = 20;int c = 30;int d = (a = 30, b++, c += 60, 20);//那么此时 a为30 b为21 c为90 d取上最后一个表达式的值为20//看结果printf("%d %d %d %d", a, b, c, d);return 0;
}

1.30下标引用 函数调⽤
[] ()
下标引用 主要用于数组中调用任意位置中的元素
当然他也可以对指针使用等效于 a[0]==*(a+0)
函数调用符号更没什么好讲了,用于函数的调用以及定义
还是举例看代码就好
void haha(int a,int b);//这是函数声明,用了 ()
int main()
{
int a=20;
int *p=&a;
int c=p[0];//算是解引用的一种
int arr[20]={0};//对数组的定义
return 0;
}
至此几乎所有的操作符的基本使用都讲解完了接下来看看优先级以及结合性
1.3操作符的属性
分为优先级、结合性
先上一张图
1.31优先级结合性
优先级 优先级指的是,如果⼀个表达式包含多个运算符,哪个运算符应该优先执⾏。各种运算符的优先级是 不⼀样的
比如
3 + 4 * 5;
上⾯示例中,表达式 3 + 4 * 5 ⾥⾯既有加法运算符( + ),⼜有乘法运算符( * )。由于乘法 的优先级高于加法,所以会先计算 4 * 5 ,⽽不是先计算 3 + 4
结合性
如果两个运算符优先级相同,优先级没办法确定先计算哪个了,这时候就看结合性了,则根据运算符 是左结合,还是右结合,决定执⾏顺序。⼤部分运算符是左结合(从左到右执⾏),少数运算符是右 结合(从右到左执⾏),⽐如赋值运算符( = )
5 * 6 / 2;
上⾯⽰例中, * 和 / 的优先级相同,它们都是左结合运算符,所以从左到右执⾏,先计算 5 * 6 , 再计算 6 / 2
运算符的优先级顺序很多,下⾯是部分运算符的优先级顺序(按照优先级从⾼到低排列),建议⼤概 记住这些操作符的优先级就⾏,其他操作符在使⽤的时候查看下⾯表格就可以了
我们可以列出几个优先级问题的代码,一般而言优先级不需要特殊记忆,只要多敲多练即可


看看代码
int main()
{int a = 10;//看看,如果我们要让a先左移两位再按位与上一个1,就必须要加上括号//否则此时是先2与1逻辑与再左移int d =(a<<2)&1;return 0;
}
//这个很容易搞错,大家以后会遇到这样的代码
再看一个例子
int main()
{int arr[20] = {0};int** parr = &arr;//不加上括号的话编译器无法知道 是先执行 * 还是[] 所以要加上()(*parr)[10] = 1;return 0;
}
这类例子还有很多,基本上都是解引用的优先级一样不知道先使用那个解应用
对于结合性只需记忆一个点
1 赋值操作符都是从右往左
2三目操作符从右往左
3其他基本都是从左往右
总结
大家还是要多练,才能有理解,祝大家开心
相关文章:
C语言操作符详细讲解
前言 本次博客一定会让刚刚学习C语言小白有所收获 本次操作符讲解不仅分类还会有代码示例 好好看 好好学 花上几分钟就可以避免许多坑 1 操作符的基本使用 1.1操作符的分类 按功能分 算术操作符: 、- 、* 、/ 、% 移位操作符: >> << 位操作符…...
Godot 学习笔记(5):国际化多语言翻译,包含常用10种语言机翻!
文章目录 前言国际化翻译Api选择小牛测试 语言选择代码逻辑实体对象翻译帮助类导出模板读取文件翻译测试多语言测试 综合翻译文件准备测试代码测试结果 完整代码实体类翻译帮助类网络帮助类 最终效果翻译前翻译中翻译后 总结 前言 为了面向更大的市场,国际化是肯定…...
服务器大请求体问题定位
背景 整个系统,分位微服务A、微服务B,A在调用B的过程中,报400BadRequest,问题定位到修复后,如何发送一个同样的请求进行验证 解决过程 1、查询A服务的日志,发现在调用B的过程中报错400BadRequest,并且请求体非常大300多KB 2、查看B服务的日志,发现请求没有进来 3、发…...
Vue指令之v-model
调了半天没反应,结果是没引用Vue,我是伞兵。 v-model的作用是将视图与数据双向绑定。一般情况下,Vue是数据驱动的,即数据发生改变后网页就会刷新一次,更改对应的网页内容,即数据单向绑定了网页内容。而使用…...
信息系统项目管理师——第11章项目成本管理(重要)
选择、本章节内容属于10大管理知识领域中的重中之重案例、论文都会考,需要完全掌握。 选择题大概考3分左右,理论和计算都会考。 案例题,必考内容,挣值相关的计算,必须得会。 论文题,考的比较多,…...
SpringMVC常见面试题
1:Spring mvc执行流程 回答: 版本1:视图版本,jsp 用户发送出请求到前端控制器DispatcherServletDispatcherServlet收到请求调用HandlerMapping(处理映射器)HandlerMapping找到具体的处理器,生成处理器对象及处理器拦…...
golang 和java对比
Golang(又称Go)和Java都是目前非常流行的编程语言,但它们有着不同的设计哲学和用途。在本文中,我们将对Golang和Java进行比较,从以下几个方面进行评估:语言特性、性能、并发性能、生态系统和使用场景。 一…...
基于pear-admin-flask 的 flask 使用教程
我最近接触到了一个极为出色的Flask后台库——pear-admin-flask,这个库具有很高的二次开发价值。借此机会学习并吸收其中Flask开发的一些高级技巧。 1. flask 自定义命令 pear-admin-flask/applications/common/script/admin.py from flask.cli import AppGroup …...
Android 开发投屏软件
一、背景 作为Android开发总会有给他人share自己APP情况,一般在线会议投屏,总是需要在手机上安装对应会议软件特别麻烦~ 二、投屏 Android Studio已经自带了投屏能力,可以在电脑端直接控制手机,同步起来非常方便简单 打开步骤 …...
.Net Web窗口页属性
<%Page %> Page 指令定义 Web 窗体使用的属性,这些属性将被 Web 窗体页分析器和编译器使用。只能包含在 .aspx 文件中。我们每新建一个 Web 页面时,系统会自动为该 Web 页面头部创建一个 Page 指令,来指明页面最基本的属性。 Langu…...
渐变色x轴换行柱状图
// 系统上云率const optionBar {title: {text: 系统上云率,left: left,textStyle: {color: "#fff",fontSize: 14,fontWeight: 650,align: "center",},},color: [#32C5FF, #00F766, #EECB5F],grid: {top: 40,bottom: 0,},legend: { // 控制图例组件show: …...
源支付V7开源版2.99,修复各种提示错误
源支付V7开源版2.99,修复各种提示错误 加密说明:200拿来的,只有8.1这个文件加密,其他文件无任何加密,已修复各种提示错误 测试其他开源版安装提示错误,有几个文件是加密的 注:开发不易&#…...
Mysql中的那些锁
表锁和行锁 表锁:一锁锁整张表,mysql中锁定颗粒度最大的一种,针对非索引字段加的锁。MyISAM和InnoDb都支持。 行锁:一锁只锁整行,锁定颗粒度最小,针对索引字段加的锁。MyISAM不支持,InnoDb支持…...
如何在Linux系统部署ONLYOFFICE协作办公利器并实现多人实时编辑文档
文章目录 1. 安装Docker2. 本地安装部署ONLYOFFICE3. 安装cpolar内网穿透4. 固定OnlyOffice公网地址 本篇文章讲解如何使用Docker在本地服务器上安装ONLYOFFICE,并结合cpolar内网穿透实现公网访问。 Community Edition允许您在本地服务器上安装ONLYOFFICE文档&…...
Linux部署Sonarqube+Gogs+Jenkins(一)
Linux部署SonarqubeGogsJenkins 一、1.Linux安装JDK11环境1. 本地进行上传2. 进入到/usr/java目录,并且进行解压3. 配置文件/etc/profile,配置环境变量4.让对应的配置文件生效5. 验证 二、Linux安装Python环境三、Linux安装Jenkins环境1、/usr目录下创建…...
程序员开发技术整理(持续整理中)
前端技术: vue-前端框架element-前端框架bootstrap-前端框架echarts-图标组件 C#后端技术: webservice:soap架构:简单的通信协议,用于服务通信ORM框架:对象关系映射,如EF:对象实体…...
Java并查集详解(附Leetcode 547.省份数量讲解)
一、并查集概念 并查集是一种树型的数据结构,用于处理一些不相交集合的合并及查询问题。 并查集的思想是用一个数组表示了整片森林(parent),树的根节点唯一标识了一个集合,我们只要找到了某个元素的的树根,…...
【MySQL】DQL-基础查询-语句&演示(查询多个字段 / 所有字段/并设置别名/去重)
前言 大家好吖,欢迎来到 YY 滴MySQL系列 ,热烈欢迎! 本章主要内容面向接触过C Linux的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! YY的《C》专栏YY的《C11》专栏YY的…...
更新一条SQL的执行流程
在 MySQL中,条更新 SQL 语句执行的过程通常包括以下主要步骤: 1.客户端发送请求: 客户端应用程序(如数据库连接器或应用程序)构建一条 UPDATE SQL 语句,并将其发送到 MySOL 服务器端。 2.查询解析和优化: MySQL 服务器接收到请求后,先进行语法…...
深入理解nginx mp4流媒体模块[上]
目录 1. 引言2. 配置3. 源码分析3.1 配置指令3.1.1 mp43.1.2 mp4_buffer_size3.1.3 mp4_max_buffer_size3.1.4 mp4_start_key_frame 3.2 MP4的请求处理过程3.2.1 预处理3.2.2 找到并打开本地mp4文件3.2.3 解析请求参数3.2.4 MP4文件的处理 深入理解nginx mp4流媒体模块[上] 深入…...
IDEA运行Tomcat出现乱码问题解决汇总
最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
从零实现富文本编辑器#5-编辑器选区模型的状态结构表达
先前我们总结了浏览器选区模型的交互策略,并且实现了基本的选区操作,还调研了自绘选区的实现。那么相对的,我们还需要设计编辑器的选区表达,也可以称为模型选区。编辑器中应用变更时的操作范围,就是以模型选区为基准来…...
【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...
vue3 字体颜色设置的多种方式
在Vue 3中设置字体颜色可以通过多种方式实现,这取决于你是想在组件内部直接设置,还是在CSS/SCSS/LESS等样式文件中定义。以下是几种常见的方法: 1. 内联样式 你可以直接在模板中使用style绑定来设置字体颜色。 <template><div :s…...
Linux云原生安全:零信任架构与机密计算
Linux云原生安全:零信任架构与机密计算 构建坚不可摧的云原生防御体系 引言:云原生安全的范式革命 随着云原生技术的普及,安全边界正在从传统的网络边界向工作负载内部转移。Gartner预测,到2025年,零信任架构将成为超…...
VTK如何让部分单位不可见
最近遇到一个需求,需要让一个vtkDataSet中的部分单元不可见,查阅了一些资料大概有以下几种方式 1.通过颜色映射表来进行,是最正规的做法 vtkNew<vtkLookupTable> lut; //值为0不显示,主要是最后一个参数,透明度…...
C++.OpenGL (10/64)基础光照(Basic Lighting)
基础光照(Basic Lighting) 冯氏光照模型(Phong Lighting Model) #mermaid-svg-GLdskXwWINxNGHso {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-GLdskXwWINxNGHso .error-icon{fill:#552222;}#mermaid-svg-GLd…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
