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

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操作符的分类 按功能分 算术操作符&#xff1a; 、- 、* 、/ 、% 移位操作符: >> << 位操作符…...

Godot 学习笔记(5):国际化多语言翻译,包含常用10种语言机翻!

文章目录 前言国际化翻译Api选择小牛测试 语言选择代码逻辑实体对象翻译帮助类导出模板读取文件翻译测试多语言测试 综合翻译文件准备测试代码测试结果 完整代码实体类翻译帮助类网络帮助类 最终效果翻译前翻译中翻译后 总结 前言 为了面向更大的市场&#xff0c;国际化是肯定…...

服务器大请求体问题定位

背景 整个系统,分位微服务A、微服务B,A在调用B的过程中,报400BadRequest,问题定位到修复后,如何发送一个同样的请求进行验证 解决过程 1、查询A服务的日志,发现在调用B的过程中报错400BadRequest,并且请求体非常大300多KB 2、查看B服务的日志,发现请求没有进来 3、发…...

Vue指令之v-model

调了半天没反应&#xff0c;结果是没引用Vue&#xff0c;我是伞兵。 v-model的作用是将视图与数据双向绑定。一般情况下&#xff0c;Vue是数据驱动的&#xff0c;即数据发生改变后网页就会刷新一次&#xff0c;更改对应的网页内容&#xff0c;即数据单向绑定了网页内容。而使用…...

信息系统项目管理师——第11章项目成本管理(重要)

选择、本章节内容属于10大管理知识领域中的重中之重案例、论文都会考&#xff0c;需要完全掌握。 选择题大概考3分左右&#xff0c;理论和计算都会考。 案例题&#xff0c;必考内容&#xff0c;挣值相关的计算&#xff0c;必须得会。 论文题&#xff0c;考的比较多&#xff0c;…...

SpringMVC常见面试题

1&#xff1a;Spring mvc执行流程 回答&#xff1a; 版本1&#xff1a;视图版本&#xff0c;jsp 用户发送出请求到前端控制器DispatcherServletDispatcherServlet收到请求调用HandlerMapping(处理映射器)HandlerMapping找到具体的处理器&#xff0c;生成处理器对象及处理器拦…...

golang 和java对比

Golang&#xff08;又称Go&#xff09;和Java都是目前非常流行的编程语言&#xff0c;但它们有着不同的设计哲学和用途。在本文中&#xff0c;我们将对Golang和Java进行比较&#xff0c;从以下几个方面进行评估&#xff1a;语言特性、性能、并发性能、生态系统和使用场景。 一…...

基于pear-admin-flask 的 flask 使用教程

我最近接触到了一个极为出色的Flask后台库——pear-admin-flask&#xff0c;这个库具有很高的二次开发价值。借此机会学习并吸收其中Flask开发的一些高级技巧。 1. flask 自定义命令 pear-admin-flask/applications/common/script/admin.py from flask.cli import AppGroup …...

Android 开发投屏软件

一、背景 作为Android开发总会有给他人share自己APP情况&#xff0c;一般在线会议投屏&#xff0c;总是需要在手机上安装对应会议软件特别麻烦~ 二、投屏 Android Studio已经自带了投屏能力&#xff0c;可以在电脑端直接控制手机&#xff0c;同步起来非常方便简单 打开步骤 …...

.Net Web窗口页属性

<%Page %> Page 指令定义 Web 窗体使用的属性&#xff0c;这些属性将被 Web 窗体页分析器和编译器使用。只能包含在 .aspx 文件中。我们每新建一个 Web 页面时&#xff0c;系统会自动为该 Web 页面头部创建一个 Page 指令&#xff0c;来指明页面最基本的属性。 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&#xff0c;修复各种提示错误 加密说明&#xff1a;200拿来的&#xff0c;只有8.1这个文件加密&#xff0c;其他文件无任何加密&#xff0c;已修复各种提示错误 测试其他开源版安装提示错误&#xff0c;有几个文件是加密的 注&#xff1a;开发不易&#…...

Mysql中的那些锁

表锁和行锁 表锁&#xff1a;一锁锁整张表&#xff0c;mysql中锁定颗粒度最大的一种&#xff0c;针对非索引字段加的锁。MyISAM和InnoDb都支持。 行锁&#xff1a;一锁只锁整行&#xff0c;锁定颗粒度最小&#xff0c;针对索引字段加的锁。MyISAM不支持&#xff0c;InnoDb支持…...

如何在Linux系统部署ONLYOFFICE协作办公利器并实现多人实时编辑文档

文章目录 1. 安装Docker2. 本地安装部署ONLYOFFICE3. 安装cpolar内网穿透4. 固定OnlyOffice公网地址 本篇文章讲解如何使用Docker在本地服务器上安装ONLYOFFICE&#xff0c;并结合cpolar内网穿透实现公网访问。 Community Edition允许您在本地服务器上安装ONLYOFFICE文档&…...

Linux部署Sonarqube+Gogs+Jenkins(一)

Linux部署SonarqubeGogsJenkins 一、1.Linux安装JDK11环境1. 本地进行上传2. 进入到/usr/java目录&#xff0c;并且进行解压3. 配置文件/etc/profile&#xff0c;配置环境变量4.让对应的配置文件生效5. 验证 二、Linux安装Python环境三、Linux安装Jenkins环境1、/usr目录下创建…...

程序员开发技术整理(持续整理中)

前端技术&#xff1a; vue-前端框架element-前端框架bootstrap-前端框架echarts-图标组件 C#后端技术&#xff1a; webservice&#xff1a;soap架构&#xff1a;简单的通信协议&#xff0c;用于服务通信ORM框架&#xff1a;对象关系映射&#xff0c;如EF&#xff1a;对象实体…...

Java并查集详解(附Leetcode 547.省份数量讲解)

一、并查集概念 并查集是一种树型的数据结构&#xff0c;用于处理一些不相交集合的合并及查询问题。 并查集的思想是用一个数组表示了整片森林&#xff08;parent&#xff09;&#xff0c;树的根节点唯一标识了一个集合&#xff0c;我们只要找到了某个元素的的树根&#xff0c;…...

【MySQL】DQL-基础查询-语句&演示(查询多个字段 / 所有字段/并设置别名/去重)

前言 大家好吖&#xff0c;欢迎来到 YY 滴MySQL系列 &#xff0c;热烈欢迎&#xff01; 本章主要内容面向接触过C Linux的老铁 主要内容含&#xff1a; 欢迎订阅 YY滴C专栏&#xff01;更多干货持续更新&#xff01;以下是传送门&#xff01; YY的《C》专栏YY的《C11》专栏YY的…...

更新一条SQL的执行流程

在 MySQL中&#xff0c;条更新 SQL 语句执行的过程通常包括以下主要步骤: 1.客户端发送请求: 客户端应用程序(如数据库连接器或应用程序)构建一条 UPDATE SQL 语句&#xff0c;并将其发送到 MySOL 服务器端。 2.查询解析和优化: MySQL 服务器接收到请求后&#xff0c;先进行语法…...

深入理解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流媒体模块[上] 深入…...

【根据当天日期输出明天的日期(需对闰年做判定)。】2022-5-15

缘由根据当天日期输出明天的日期(需对闰年做判定)。日期类型结构体如下&#xff1a; struct data{ int year; int month; int day;};-编程语言-CSDN问答 struct mdata{ int year; int month; int day; }mdata; int 天数(int year, int month) {switch (month){case 1: case 3:…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文&#xff5c;魏琳华 编&#xff5c;王一粟 一场大会&#xff0c;聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中&#xff0c;汇集了学界、创业公司和大厂等三方的热门选手&#xff0c;关于多模态的集中讨论达到了前所未有的热度。其中&#xff0c;…...

python打卡day49

知识点回顾&#xff1a; 通道注意力模块复习空间注意力模块CBAM的定义 作业&#xff1a;尝试对今天的模型检查参数数目&#xff0c;并用tensorboard查看训练过程 import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self,…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能&#xff0c;包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

【Redis技术进阶之路】「原理分析系列开篇」分析客户端和服务端网络诵信交互实现(服务端执行命令请求的过程 - 初始化服务器)

服务端执行命令请求的过程 【专栏简介】【技术大纲】【专栏目标】【目标人群】1. Redis爱好者与社区成员2. 后端开发和系统架构师3. 计算机专业的本科生及研究生 初始化服务器1. 初始化服务器状态结构初始化RedisServer变量 2. 加载相关系统配置和用户配置参数定制化配置参数案…...

【磁盘】每天掌握一个Linux命令 - iostat

目录 【磁盘】每天掌握一个Linux命令 - iostat工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景 注意事项 【磁盘】每天掌握一个Linux命令 - iostat 工具概述 iostat&#xff08;I/O Statistics&#xff09;是Linux系统下用于监视系统输入输出设备和CPU使…...

从零开始打造 OpenSTLinux 6.6 Yocto 系统(基于STM32CubeMX)(九)

设备树移植 和uboot设备树修改的内容同步到kernel将设备树stm32mp157d-stm32mp157daa1-mx.dts复制到内核源码目录下 源码修改及编译 修改arch/arm/boot/dts/st/Makefile&#xff0c;新增设备树编译 stm32mp157f-ev1-m4-examples.dtb \stm32mp157d-stm32mp157daa1-mx.dtb修改…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...

CVE-2020-17519源码分析与漏洞复现(Flink 任意文件读取)

漏洞概览 漏洞名称&#xff1a;Apache Flink REST API 任意文件读取漏洞CVE编号&#xff1a;CVE-2020-17519CVSS评分&#xff1a;7.5影响版本&#xff1a;Apache Flink 1.11.0、1.11.1、1.11.2修复版本&#xff1a;≥ 1.11.3 或 ≥ 1.12.0漏洞类型&#xff1a;路径遍历&#x…...

动态 Web 开发技术入门篇

一、HTTP 协议核心 1.1 HTTP 基础 协议全称 &#xff1a;HyperText Transfer Protocol&#xff08;超文本传输协议&#xff09; 默认端口 &#xff1a;HTTP 使用 80 端口&#xff0c;HTTPS 使用 443 端口。 请求方法 &#xff1a; GET &#xff1a;用于获取资源&#xff0c;…...