c语言操作符(详细讲解)
目录
前言
一、算术操作符
一元操作符:
二元操作符:
二、赋值操作符
代码例子:
三、比较操作符
相等与不相等比较操作符:
大于和小于比较操作符:
大于等于和小于等于比较操作符:
四、逻辑操作符
逻辑与(&&)
逻辑或(||)
逻辑非(!)
代码:
五、位操作符
按位与(&): 将两个数的对应位都为1时,结果为1,否则为0。
按位或(|): 将两个数的对应位至少有一个为1时,结果为1,否则为0。
按位异或(^): 将两个数的对应位不相同时,结果为1,否则为0。
按位取反(~): 将一个数的所有位取反,即0变为1,1变为0。
代码示例:
六、其他操作符
条件操作符(? :)
逗号操作符(,)
sizeof 操作符
指针操作符(* 和 &)
强制类型转换操作符((类型))
成员选择操作符(. 和 ->)
下标操作符([])
七、运算符优先级
总结
前言
本文主要讲解了c语言操作符方面的内容
一、算术操作符
一元操作符:
正号(+):
表示正数,不改变数值。 负号(-):表示负数,改变数值的符号。
二元操作符:
加法(+):将两个数相加。
减法(-):将第二个数从第一个数中减去。
乘法(*):将两个数相乘。
除法(/):将第一个数除以第二个数。
模运算(%): 取余运算,返回除法的余数。

自增(++)和自减(--)运算: 自增运算将操作数的值增加1,自减运算将操作数的值减少1。可以用于前缀和后缀运算符,分别表示在运算前和运算后进行增加或减少操作。例如,++x表示先将x增加1,然后使用增加后的值进行运算,而x++表示先使用x的值进行运算,然后增加1。

二、赋值操作符
-
C语言中的赋值操作符有简单赋值操作符和复合赋值操作符。
-
简单赋值操作符(=): 简单赋值操作符用于将右边表达式的值赋给左边的变量。 例如:
int x = 5;将整数值5赋给变量x。 -
复合赋值操作符: 复合赋值操作符将算术运算符和赋值操作符结合在一起,可以简化代码。
- += 用于将右边表达式的值加到左边变量的值上,然后将结果赋给左边变量。 例如:
x += 5;相当于x = x + 5; - -= 用于将右边表达式的值从左边变量的值中减去,然后将结果赋给左边变量。 例如:
x -= 5;相当于x = x - 5; - *= 用于将右边表达式的值乘以左边变量的值,然后将结果赋给左边变量。 例如:
x *= 5;相当于x = x * 5; - /= 用于将左边变量的值除以右边表达式的值,然后将结果赋给左边变量。 例如:
x /= 5;相当于x = x / 5; - %= 用于将左边变量的值取模(求余数)右边表达式的值,然后将结果赋给左边变量。 例如:
x %= 5;相当于x = x %5 -
代码例子:
- += 用于将右边表达式的值加到左边变量的值上,然后将结果赋给左边变量。 例如:
#include <stdio.h>int main() {int x = 10;printf("初始值 x = %d\n", x);x += 5;printf("x += 5 后的值 x = %d\n", x);x -= 3;printf("x -= 3 后的值 x = %d\n", x);x *= 2;printf("x *= 2 后的值 x = %d\n", x);x /= 4;printf("x /= 4 后的值 x = %d\n", x);x %= 3;printf("x %%= 3 后的值 x = %d\n", x);return 0;
}
初始值 x = 10
x += 5 后的值 x = 15
x -= 3 后的值 x = 12
x *= 2 后的值 x = 24
x /= 4 后的值 x = 6
x %= 3 后的值 x = 0
三、比较操作符
-
比较操作符可以结合if,else if等判断语句达到你想要达到的效果
-
相等与不相等比较操作符:
-
int a = 5; int b = 10;if (a == b) {printf("a 等于 b\n"); } else {printf("a 不等于 b\n"); }if (a != b) {printf("a 不等于 b\n"); } else {printf("a 等于 b\n"); } -
大于和小于比较操作符:
-
int x = 15; int y = 20;if (x > y) {printf("x 大于 y\n"); } else {printf("x 小于等于 y\n"); }if (x < y) {printf("x 小于 y\n"); } else {printf("x 大于等于 y\n"); } -
大于等于和小于等于比较操作符:
-
int p = 25; int q = 25;if (p >= q) {printf("p 大于等于 q\n"); } else {printf("p 小于 q\n"); }if (p <= q) {printf("p 小于等于 q\n"); } else {printf("p 大于 q\n"); }以上示例代码演示了C语言中比较操作符的使用方法和输出结果。请注意,比较操作符返回的结果是一个布尔值,即真(非零)或假(零),用于条件语句的判断。
四、逻辑操作符
逻辑操作符可以结合if,else if等判断语句达到你想要达到的效果
-
逻辑与(&&)
- 用于判断两个条件是否同时成立。在第一个if语句中,我们判断a是否大于0并且b是否大于0,如果两个条件都成立,则输出"Both a and b are greater than 0"。
-
逻辑或(||)
- 用于判断两个条件是否至少一个成立。在第二个if语句中,我们判断a是否大于0或者b是否大于0,如果至少一个条件成立,则输出"Either a or b is greater than 0"。
-
逻辑非(!)
- 用于取反一个条件。在第三个if语句中,我们判断a是否不大于0,如果条件不成立,则输出"a is not greater than 0"。
-
代码:
-
#include <stdio.h>int main() {int a = 10;int b = 5;// 逻辑与(&&)if (a > 0 && b > 0) {printf("Both a and b are greater than 0\n");}// 逻辑或(||)if (a > 0 || b > 0) {printf("Either a or b is greater than 0\n");}// 逻辑非(!)if (!(a > 0)) {printf("a is not greater than 0\n");}return 0; }
五、位操作符
-
按位与(&): 将两个数的对应位都为1时,结果为1,否则为0。
按位或(|): 将两个数的对应位至少有一个为1时,结果为1,否则为0。
按位异或(^): 将两个数的对应位不相同时,结果为1,否则为0。
按位取反(~): 将一个数的所有位取反,即0变为1,1变为0。
-
代码示例:
-
在上面的代码中,使用了#include <stdio.h>int main() {unsigned int a = 5; // 二进制表示为 0000 0101unsigned int b = 10; // 二进制表示为 0000 1010unsigned int result;// 按位与(&)操作result = a & b; // 二进制运算为 0000 0000,即 0printf("按位与的结果为:%u\n", result);// 按位或(|)操作result = a | b; // 二进制运算为 0000 1111,即 15printf("按位或的结果为:%u\n", result);// 按位异或(^)操作result = a ^ b; // 二进制运算为 0000 1111,即 15printf("按位异或的结果为:%u\n", result);// 按位取反(~)操作result = ~a; // 二进制运算为 1111 1010,即 4294967290printf("按位取反的结果为:%u\n", result);return 0; }按位与的结果为:0 按位或的结果为:15 按位异或的结果为:15 按位取反的结果为:4294967290unsigned int类型来存储无符号整数,以便进行位操作。根据运算规则,在进行位操作时,将对每个二进制位进行操作,得到相应的结果。
六、其他操作符
-
下面是c语言中其他操作符的例子:
条件操作符(? :)
int a = 10; int b = 5; int max = (a > b) ? a : b; // 如果 a 大于 b,max 等于 a,否则等于 b逗号操作符(,)
int a = 1, b = 2, c = 3; int sum = (a + b, b + c); // 使用逗号操作符计算 b + c,得到结果 5,赋给 sumsizeof 操作符
int arr[5]; int size = sizeof(arr); // 获取 arr 数组的大小,结果为 20(字节)指针操作符(* 和 &)
int num = 10; int *ptr = # // 定义一个指向 int 类型的指针 ptr,将变量 num 的地址赋给 ptr int value = *ptr; // 将 ptr 指向的地址的值赋给 value,即 value 等于 10强制类型转换操作符((类型))
double num = 3.14; int integerPart = (int)num; // 将浮点数 num 强制转换为整型,结果为 3成员选择操作符(. 和 ->)
struct Point {int x;int y; };struct Point p; p.x = 10; // 使用点操作符设置成员变量 x 的值 p.y = 20; // 使用点操作符设置成员变量 y 的值struct Point *ptr = &p; ptr->x = 30; // 使用箭头操作符设置指针指向的结构体变量的成员变量 x 的值 ptr->y = 40; // 使用箭头操作符设置指针指向的结构体变量的成员变量 y 的值下标操作符([])
- 访问数组以及容器,字符串等下标等都会用到
-
int arr[5] = {1, 2, 3, 4, 5}; int element = arr[2]; // 获得 arr 数组中索引为 2 的元素,结果为 3在这些代码示例中演示了条件操作符、逗号操作符、sizeof 操作符、指针操作符、强制类型转换操作符、成员选择操作符和下标操作符的用法。请注意在实际编码中根据需求灵活使用这些操作符。
七、运算符优先级
在编程中,运算符优先级决定了表达式中各个运算符的计算顺序。当一个表达式中存在多个运算符时,运算符优先级可以帮助程序员确定计算的先后顺序,从而得出正确的结果。以下是常见的运算符优先级,从高到低排列:
- 圆括号:() - 最高优先级的运算符,可以改变其他运算符的计算顺序。
- 一元运算符:!、~、-、+、++、-- - 这些运算符用于对单个操作数进行运算。
- 乘法和除法:*、/、% - 乘法、除法和取模运算符按照从左到右的顺序进行计算。
- 加法和减法:+、- - 加法和减法运算符按照从左到右的顺序进行计算。
- 关系运算符:<、<=、>、>= - 这些运算符用于比较两个数的大小,并返回一个布尔值。
- 相等运算符:==、!= - 用于比较两个数是否相等,并返回一个布尔值。
- 逻辑运算符:&&、|| - 这些运算符用于组合多个表达式,并返回一个布尔值。
- 赋值运算符:=、+=、-=、*=、/=、%= - 赋值运算符用于给变量赋值。
- 逗号运算符:, - 逗号运算符用于分隔多个表达式,并返回最后一个表达式的结果。
当表达式中存在多个运算符时,根据优先级和结合性(从左到右或从右到左)来确定运算的先后顺序。如果不确定,可以使用圆括号来明确指定运算顺序。
总结
以上就是c语言操作符相关的内容啦,后续我会带来更多实用的内容,感兴趣的可以点个赞支持一下!
相关文章:
c语言操作符(详细讲解)
目录 前言 一、算术操作符 一元操作符: 二元操作符: 二、赋值操作符 代码例子: 三、比较操作符 相等与不相等比较操作符: 大于和小于比较操作符: 大于等于和小于等于比较操作符: 四、逻辑操作符 逻辑与&…...
【自然语言处理(NLP)】深度学习架构:Transformer 原理及代码实现
文章目录 介绍Transformer核心组件架构图编码器(Encoder)解码器(Decoder) 优点应用代码实现导包基于位置的前馈网络残差连接后进行层规范化编码器 Block编码器解码器 Block解码器训练预测 个人主页:道友老李 欢迎加入社…...
JavaScript 入门教程
JavaScript 入门教程 JavaScript 入门教程引言学习 JavaScript 的好处常见的 JavaScript 框架和库 安装开发环境下载并安装 Node.js 和 npm安装常用开发工具(如 VS Code)配置本地开发环境 基础语法入门数据类型变量与常量运算符算术运算符比较运算符 条件…...
浅析CDN安全策略防范
CDN(内容分发网络)信息安全策略是保障内容分发网络在提供高效服务的同时,确保数据传输安全、防止恶意攻击和保护用户隐私的重要手段。以下从多个方面详细介绍CDN的信息安全策略: 1. 数据加密 数据加密是CDN信息安全策略的核心之…...
代码随想录刷题day22|(字符串篇)344.反转字符串、541.反转字符串 II
目录 一、题目思路 二、相关题目 三、总结与知识点 3.1 字符数组转换成字符串 一、题目思路 344反转字符串比较容易,双指针即可在空间复杂度为O(1)的基础上解决; 541反转字符串II :其中for循环中 i 每次的取值,不是 i&#…...
python学opencv|读取图像(五十三)原理探索:使用cv.matchTemplate()函数实现最佳图像匹配
【1】引言 前序学习进程中,已经探索了使用cv.matchTemplate()函数实现最佳图像匹配的技巧,并且成功对两个目标进行了匹配。 相关文章链接为:python学opencv|读取图像(五十二)使用cv.matchTemplate()函数实现最佳图像…...
win10部署本地deepseek-r1,chatbox,deepseek联网(谷歌网页插件Page Assist)
win10部署本地deepseek-r1,chatbox,deepseek联网(谷歌网页插件Page Assist) 前言一、本地部署DeepSeek-r1step1 安装ollamastep2 下载deepseek-r1step2.1 找到模型deepseek-r1step2.2 cmd里粘贴 后按回车,进行下载 ste…...
冯·诺依曼体系结构
目录 冯诺依曼体系结构推导 内存提高冯诺依曼体系结构效率的方法 你使用QQ和朋友聊天时,整个数据流是怎么流动的(不考虑网络情况) 与冯诺依曼体系结构相关的一些知识 冯诺依曼体系结构推导 计算机的存在就是为了解决问题,而解…...
本地部署 DeepSeek-R1 模型
文章目录 霸屏的AIDeepSeek是什么?安装DeepSeek安装图形化界面总结 霸屏的AI 最近在刷视频的时候,总是突然突然出现一个名叫 DeepSeek 的玩意,像这样: 这样: 这不经激起我的一顿好奇心,这 DeepSeek 到底是个…...
Mybatis——sql映射文件中的增删查改
映射文件内的增删查改 准备工作 准备一张数据表,用于进行数据库的相关操作。新建maven工程, 导入mysql-connector-java和mybatis依赖。新建一个实体类,类的字段要和数据表的数据对应编写接口编写mybatis主配置文件 public class User {priva…...
【开源免费】基于Vue和SpringBoot的流浪宠物管理系统(附论文)
本文项目编号 T 182 ,文末自助获取源码 \color{red}{T182,文末自助获取源码} T182,文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...
nth_element函数——C++快速选择函数
目录 1. 函数原型 2. 功能描述 3. 算法原理 4. 时间复杂度 5. 空间复杂度 6. 使用示例 8. 注意事项 9. 自定义比较函数 11. 总结 nth_element 是 C 标准库中提供的一个算法,位于 <algorithm> 头文件中,用于部分排序序列。它的主要功能是将…...
DNS缓存详解(DNS Cache Detailed Explanation)
DNS缓存详解 清空DNS缓存可以让网页访问更快捷。本文将从什么是DNS缓存、为什么清空DNS缓存、如何清空DNS缓存、清空DNS缓存存在的问题四个方面详细阐述DNS缓存清空的相关知识。 一、什么是DNS缓存 1、DNS缓存的定义: DNS缓存是域名系统服务在遇到DNS查询时自动…...
课设:【ID0022】火车票售票管理系统(前端)
技术栈:Java,JavaSwing,MySQL 数据库表数量:12个 1.功能描述 管理员功能 管理员是系统的高级用户,拥有对整个系统的全面管理权限。管理员的功能模块包括以下六个方面: 对用户管理增删查改 对售票员…...
Ruby 类和对象
Ruby 类和对象 引言 在软件开发中,类和对象是面向对象编程(OOP)的核心概念。Ruby 作为一种动态、解释型编程语言,也以简洁的方式支持面向对象编程。本文将深入探讨 Ruby 中的类和对象,包括它们的定义、创建、使用以及一些高级特性。 类与对象的定义 类 在 Ruby 中,类…...
Java基础知识总结(三十八)--读取数据
使用Reader体系,读取一个文本文件中的数据。返回 -1 ,标志读到结尾。 import java.io.*; class { public static void main(String[] args) throws IOException { /* 创建可以读取文本文件的流对象,让创建好的流对象和指定的文件相关联。…...
交错定理和切比雪夫节点的联系与区别
1. 交错定理 交错定理是切比雪夫逼近理论的核心内容,描述在区间[a,b]上,一个函数 f ( x ) f(x) f(x)的最佳一致逼近多项式 P n ( x ) P_n(x) Pn(x)的特性。定理内容如下: 设 f ( x ) f(x) f(x)是区间[a,b]上的连续函数, P n ( …...
大数据相关职位介绍之三(数据挖掘,数据安全 ,数据合规师,首席数据官,数据科学家 )
大数据相关职位介绍之三(数据挖掘,数据安全 ,数据合规师,首席数据官,数据科学家 ) 文章目录 大数据相关职位介绍之三(数据挖掘,数据安全 ,数据合规师,首席数据…...
GitHub Actions定时任务配置完全指南:从Cron语法到实战示例
你好,我是悦创。 博客网站:https://blog.bornforthis.cn/ 本教程将详细讲解如何在GitHub Actions中配置定时任务(Scheduled Tasks),帮助你掌握 Cron 表达式的编写规则和实际应用场景。 一、定时任务基础配置 1.1 核…...
Van-Nav:新年,将自己学习的项目地址统一整理搭建自己的私人导航站,供自己后续查阅使用,做技术的同学应该都有一个自己网站的梦想
嗨,大家好,我是小华同学,关注我们获得“最新、最全、最优质”开源项目和高效工作学习方法 Van-Nav是一个基于Vue.js开发的导航组件库,它提供了多种预设的样式和灵活的配置选项,使得开发者可以轻松地定制出符合项目需求…...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...
Zustand 状态管理库:极简而强大的解决方案
Zustand 是一个轻量级、快速和可扩展的状态管理库,特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
【论文笔记】若干矿井粉尘检测算法概述
总的来说,传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度,通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...
在Ubuntu中设置开机自动运行(sudo)指令的指南
在Ubuntu系统中,有时需要在系统启动时自动执行某些命令,特别是需要 sudo权限的指令。为了实现这一功能,可以使用多种方法,包括编写Systemd服务、配置 rc.local文件或使用 cron任务计划。本文将详细介绍这些方法,并提供…...
华为云Flexus+DeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建
华为云FlexusDeepSeek征文|DeepSeek-V3/R1 商用服务开通全流程与本地部署搭建 前言 如今大模型其性能出色,华为云 ModelArts Studio_MaaS大模型即服务平台华为云内置了大模型,能助力我们轻松驾驭 DeepSeek-V3/R1,本文中将分享如何…...
基于 TAPD 进行项目管理
起因 自己写了个小工具,仓库用的Github。之前在用markdown进行需求管理,现在随着功能的增加,感觉有点难以管理了,所以用TAPD这个工具进行需求、Bug管理。 操作流程 注册 TAPD,需要提供一个企业名新建一个项目&#…...
处理vxe-table 表尾数据是单独一个接口,表格tableData数据更新后,需要点击两下,表尾才是正确的
修改bug思路: 分别把 tabledata 和 表尾相关数据 console.log() 发现 更新数据先后顺序不对 settimeout延迟查询表格接口 ——测试可行 升级↑:async await 等接口返回后再开始下一个接口查询 ________________________________________________________…...
宇树科技,改名了!
提到国内具身智能和机器人领域的代表企业,那宇树科技(Unitree)必须名列其榜。 最近,宇树科技的一项新变动消息在业界引发了不少关注和讨论,即: 宇树向其合作伙伴发布了一封公司名称变更函称,因…...
解读《网络安全法》最新修订,把握网络安全新趋势
《网络安全法》自2017年施行以来,在维护网络空间安全方面发挥了重要作用。但随着网络环境的日益复杂,网络攻击、数据泄露等事件频发,现行法律已难以完全适应新的风险挑战。 2025年3月28日,国家网信办会同相关部门起草了《网络安全…...
