【C语言】C语言运算符优先级详解
文章目录
- 📝前言
- 🌉运算符优先级简述
- 🌠逻辑与和逻辑或
- 🌉赋值和逗号运算符
- 🌠位运算
- 🌉条件表达式
- 🌉位运算与算术运算结合
- 🌉混合使用条件表达式和赋值运算符
- 🌉 逗号运算符的使用
- 🌉 复杂条件表达式
- 🌠运算符优先级的重要性
- 🚩总结
📝前言
在C语言中,运算符的优先级决定了表达式中各个运算符的计算顺序。了解这些优先级对于正确理解和编写复杂表达式至关重要。本文将深入探讨C语言中各种运算符的优先级及其影响。
🌉运算符优先级简述
C语言中的运算符根据其优先级可以分为多个级别。在表达式中,具有较高优先级的运算符会在具有较低优先级的运算符之前执行。下表列出了C语言中常见的运算符,并按照优先级从高到低的顺序排列:
优先级 | 运算符 | 描述 |
---|---|---|
1 | () [] -> . | 函数调用、数组下标、结构体成员访问 |
2 | ! ~ ++ – + - | 逻辑非、按位取反、自增、自减、正负号 |
3 | * / % | 乘法、除法、取模 |
4 | + - | 加法、减法 |
5 | << >> | 左移、右移 |
6 | < <= > >= | 关系运算符 |
7 | == != | 等于、不等于 |
8 | & | 按位与 |
9 | ^ | 按位异或 |
10 | | | 按位或 |
11 | && | 逻辑与 |
12 | || | 逻辑或 |
13 | ?: | 条件表达式 |
14 | = += -= *= /= %= &= ^= |= <<= >>= | 赋值及复合赋值 |
15 | , | 逗号运算符 |
🌠逻辑与和逻辑或
#include <stdio.h>int main() {int a = 5, b = 10, c = 15;int result;result = (a > b) && (b < c); // 0printf("(a > b) && (b < c) = %d\n", result);result = (a > b) || (b < c); // 1printf("(a > b) || (b < c) = %d\n", result);return 0;
}
在第一个表达式中,(a > b)为假,因此不会继续执行后面的 (b < c),直接返回结果为0。在第二个表达式中,(a > b)为假,但由于逻辑或运算符的存在,依然继续执行 (b < c),因此返回结果为1。
🌉赋值和逗号运算符
#include <stdio.h>int main() {int a = 5, b = 10, c = 15;int result;result = (a = b, b = c, c); // 15printf("Result = %d\n", result);return 0;
}
该表达式先执行 a = b,然后执行 b = c,最后返回 c 的值。因此结果为15。
🌠位运算
#include <stdio.h>int main() {int a = 5, b = 10, c = 15;int result;result = a | b & c; // 15printf("Result = %d\n", result);return 0;
}
位与运算符(&)的优先级高于位或运算符(|),所以 b & c 先被计算,然后将结果与 a 进行位或运算,得到最终结果15。
🌉条件表达式
#include <stdio.h>int main() {int a = 5, b = 10;int result;result = (a > b) ? a : b; // 10printf("Result = %d\n", result);return 0;
}
条件表达式 (a > b) ? a : b 先判断 (a > b) 是否为真,如果为真则返回 a,否则返回 b。因为在这个示例中 (a > b) 为假,所以返回结果为10。
🌉位运算与算术运算结合
#include <stdio.h>int main() {int a = 5, b = 10, c = 3;int result;result = a + b << c; // 320printf("Result = %d\n", result);return 0;
}
在这个示例中,+ 的优先级高于 <<,所以先进行加法运算,然后再进行位左移运算。因此结果为 (a + b) << c = (5 + 10) << 3 = 15 << 3 = 120。
🌉混合使用条件表达式和赋值运算符
#include <stdio.h>int main() {int a = 5, b = 10;int result;result = (a > b) ? (a *= 2) : (b /= 2); // b = 5 / 2 = 2printf("Result = %d\n", result);return 0;
}
条件表达式中,如果 (a > b) 为假,则执行 (b /= 2),即 b 的值除以2,因此 b 最终为5。同时,条件表达式的值就是所执行的分支的值,因此 result 的值也是5。
🌉 逗号运算符的使用
#include <stdio.h>int main() {int a = 5, b = 10, c = 15;int result;result = (a = b + 2, b = c - 3, c * 2); // 30printf("Result = %d\n", result);return 0;
}
逗号运算符的优先级是最低的,因此整个表达式首先会执行 (a = b + 2),然后执行 (b = c - 3),最后返回 c * 2 的值。因此结果为 (15 * 2) = 30。
🌉 复杂条件表达式
#include <stdio.h>int main() {int a = 5, b = 10, c = 15;int result;result = (a > b) ? ((b > c) ? (a + b) : (b + c)) : (a + c); // 20printf("Result = %d\n", result);return 0;
}
在这个示例中,先判断 (a > b),如果为真则进一步判断 (b > c),如果也为真则返回 (a + b),否则返回 (b + c);如果 (a > b) 为假,则直接返回 (a + c)。因为在这个示例中 (a > b) 为假,所以返回结果为20。
🌠运算符优先级的重要性
深入理解运算符优先级对于编写高效、清晰的代码至关重要。在编写复杂表达式时,合理使用括号可以消除歧义,并确保表达式按照预期的顺序计算。错误的运算符优先级使用可能导致意外的结果,因此程序员应该牢记优先级规则并善加利用。
🚩总结
相关文章:

【C语言】C语言运算符优先级详解
文章目录 📝前言🌉运算符优先级简述 🌠逻辑与和逻辑或🌉赋值和逗号运算符 🌠位运算🌉条件表达式🌉位运算与算术运算结合🌉混合使用条件表达式和赋值运算符🌉 逗号运算符的…...

第十节HarmonyOS 常用容器组件3-GridRow
1、描述 栅格容器组件,仅可以和栅格子组件(GridCol)在栅格布局场景中使用。 2、子组件 可以包含GridCol子组件。 3、接口 GridRow(options:{columns: number | GridRowColumnOption, gutter?: Length | GutterOption, Breakpoints?: B…...

SCXI-1193是National Instruments公司生产的吗?
NI SCXI-1193是一款高密度、32通道RF多路复用器开关模块。 NI SCXI-1193 是一款由 National Instruments(NI)公司生产的屏蔽式电缆。这款电缆通常用于连接数据采集设备和传感器或执行器,以实现信号传输和数据采集。SCXI-1193 电缆具有高度灵活…...

使用clion开发tftlcd屏,移植驱动时遇到的问题记录
问题现象 屏幕只有一半屏在刷新 问题出现的情况(在CLION开发时遇到过) 总结...

工程信号的去噪和(分类、回归和时序)预测
🚀【信号去噪及预测论文代码指导】🚀 还为小论文没有思路烦恼么?本人专注于最前沿的信号处理与预测技术——基于信号模态分解的去噪算法和深度学习的信号(回归、时序和分类)预测算法,致力于为您提供最精确、…...

【VUE】前端阿里云OSS断点续传,分片上传
什么是OSS: 数据以对象(Object)的形式存储在OSS的存储空间(Bucket )中。如果要使用OSS存储数据,您需要先创建Bucket,并指定Bucket的地域、访问权限、存储类型等属性。创建Bucket后,您…...
春招面试高频题目总结
面试问题 redis 可以用于进程间通信吗? Why?How? ---> 延展一下 有哪些进程间通信技术, 优劣如何? 有大量的插入sql语句,一条条的插入性能很差,如何通过事务进行优化? 保证线程安全的策略有哪些&…...

基于SSM+Jsp+Mysql的KTV点歌系统
基于SSMJspMysql的KTV点歌系统 基于SSMJspMysql的KTV点歌系统的设计与实现 开发语言:Java框架:ssm技术:JSPJDK版本:JDK1.8服务器:tomcat7数据库:mysql 5.7(一定要5.7版本)数据库工…...
Docker Oracle提示密码过期
进入docker docker exec -it oracle bash 修改环境变量文件 vi .bash_profile 为以下内容 # .bash_profile# Get the aliases and functions if [ -f ~/.bashrc ]; then. ~/.bashrc fi# User specific environment and startup programsPATH$PATH:$HOME/binexport PATH expo…...
5.3、【AI技术新纪元:Spring AI解码】图像生成API
Spring 图像生成API Spring图像生成API旨在提供一个简单且便携的接口,用于与各类专注于图像生成的AI模型交互,使开发者能够在不同图像相关模型之间轻松切换,只需对代码进行最少的改动。这一设计遵循了Spring框架的模块化和可互换性理念,确保开发人员能够快速调整其应用程序…...

自营、入驻商城小程序开发
IT外包的隐形重负——沟通成本:当客户仅能提供大致需求,而IT公司则机械地执行,往往会导致项目细节中充满漏洞,用户体验大打折扣。 最终,项目不断延期,进度一拖再拖。探究其根源,客户往往并非IT…...

C++关键字:const
文章目录 一、const的四大作用1.修饰 变量、数组2.修饰 函数的形参、修饰 引用 (最常用)3.修饰 指针:常量指针、指针常量 、只读指针4.修饰 类的成员函数、修饰 类的对象 一、const的四大作用 1.修饰 变量、数组 1.const修饰变量: 被const修…...

nodejs 常用命令
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,常用于服务器端编程。以下是一些 Node.js 的常用命令 1、安装 Node.js: 通常,你会从 Node.js 的官方网站下载并安装适合你操作系统的版本。安装完成后,你可以在命令行中…...
nginx配置详解+nginx_lua模块的使用
nginx基本配置详解 目录 nginx基本配置详解 nginx_lua模块使用方式 openresty介绍与安装 lua基本语法使用 全局配置: user:指定Nginx主进程运行的用户。在下方示例中,Nginx将以root用户身份运行。worker_processes:指定Ngi…...

大数据--hdfs--java编程
环境: virtualbox ubantu1604 Linux idea社区版2023 jdk1.8 hadoop相关依赖 使用java操作 1. 判断/user/stu/input/test.txt文件是否存在,存在则读出文件内容,打印在控制台上。反之,输出“文件不存在”。 package abc;impo…...
力扣由浅至深 每日一题.10 最后一个单词的长度
日子都是崭新的,我们下一章见 ——24.3.21 最后一个单词的长度 给你一个字符串 s,由若干单词组成,单词前后…...

21 OpenCV 直方图均衡化
文章目录 直方图概念均衡的目的equalizeHist 均衡化算子示例 直方图概念 图像直方图,是指对整个图像像在灰度范围内的像素值(0~255)统计出现频率次数,据此生成的直方图,称为图像直方图-直方图。直方图反映了图像灰度的分布情况。 均衡的目的…...

对七层代理、四层代理、正向代理、反向代理的认识
一、理解nginx服务代理 Nginx代理有正向和反向代理两种类型,可以基于osi七层模型中的第四层(传输层)和第七层(应用层)进行代理 注: nginx 一般支持的是7层代理,支持四层代理一般使用 lvs 或者ha…...

网络: 五种IO模型
阻塞IO: 在内核将数据准备好之前, 系统调用会一直等待. 所有的套接字, 默认都是阻塞方式 非阻塞IO:若内核还未将数据准备好, 系统调用仍然会直接返回, 并且返回EWOULDBLOCK错误码. 信号驱动: 内核将数据准备好的时候, 使用SIGIO信号通知应用程序进行IO操作 多路转接: 能够同时等…...

AI大模型学习在当前技术环境下的重要性与发展前景
目录 前言1 学科基础与技能要求1.1 数学基础的深厚性1.2 编程能力的必要性1.3 对特定领域业务场景的了解 2 模型结构与算法的优化2.1 模型结构的不断演进2.2 算法优化的重要性2.3 准确性与效率的提升 3 AI大模型学习的应用场景3.1 自然语言处理3.2 计算机视觉3.3 推荐系统 结语…...

AI-调查研究-01-正念冥想有用吗?对健康的影响及科学指南
点一下关注吧!!!非常感谢!!持续更新!!! 🚀 AI篇持续更新中!(长期更新) 目前2025年06月05日更新到: AI炼丹日志-28 - Aud…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...
LeetCode - 199. 二叉树的右视图
题目 199. 二叉树的右视图 - 力扣(LeetCode) 思路 右视图是指从树的右侧看,对于每一层,只能看到该层最右边的节点。实现思路是: 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

【C++进阶篇】智能指针
C内存管理终极指南:智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

Golang——6、指针和结构体
指针和结构体 1、指针1.1、指针地址和指针类型1.2、指针取值1.3、new和make 2、结构体2.1、type关键字的使用2.2、结构体的定义和初始化2.3、结构体方法和接收者2.4、给任意类型添加方法2.5、结构体的匿名字段2.6、嵌套结构体2.7、嵌套匿名结构体2.8、结构体的继承 3、结构体与…...

Python 实现 Web 静态服务器(HTTP 协议)
目录 一、在本地启动 HTTP 服务器1. Windows 下安装 node.js1)下载安装包2)配置环境变量3)安装镜像4)node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1)使用 http-server2)详解 …...

Web后端基础(基础知识)
BS架构:Browser/Server,浏览器/服务器架构模式。客户端只需要浏览器,应用程序的逻辑和数据都存储在服务端。 优点:维护方便缺点:体验一般 CS架构:Client/Server,客户端/服务器架构模式。需要单独…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践
在 Kubernetes 集群中,如何在保障应用高可用的同时有效地管理资源,一直是运维人员和开发者关注的重点。随着微服务架构的普及,集群内各个服务的负载波动日趋明显,传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...
面试高频问题
文章目录 🚀 消息队列核心技术揭秘:从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"?性能背后的秘密1.1 顺序写入与零拷贝:性能的双引擎1.2 分区并行:数据的"八车道高速公路"1.3 页缓存与批量处理…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁
赛门铁克威胁猎手团队最新报告披露,数款拥有数百万活跃用户的Chrome扩展程序正在通过未加密的HTTP连接静默泄露用户敏感数据,严重威胁用户隐私安全。 知名扩展程序存在明文传输风险 尽管宣称提供安全浏览、数据分析或便捷界面等功能,但SEMR…...