【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 推荐系统 结语…...
Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)
目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
鸿蒙HarmonyOS 5军旗小游戏实现指南
1. 项目概述 本军旗小游戏基于鸿蒙HarmonyOS 5开发,采用DevEco Studio实现,包含完整的游戏逻辑和UI界面。 2. 项目结构 /src/main/java/com/example/militarychess/├── MainAbilitySlice.java // 主界面├── GameView.java // 游戏核…...
Python第七周作业
Python第七周作业 文章目录 Python第七周作业 1.使用open以只读模式打开文件data.txt,并逐行打印内容 2.使用pathlib模块获取当前脚本的绝对路径,并创建logs目录(若不存在) 3.递归遍历目录data,输出所有.csv文件的路径…...
20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题
20250609在荣品的PRO-RK3566开发板的Android13下解决串口可以执行命令但是脚本执行命令异常的问题 2025/6/9 20:54 缘起,为了跨网段推流,千辛万苦配置好了网络参数。 但是命令iptables -t filter -F tetherctrl_FORWARD可以在调试串口/DEBUG口正确执行。…...
codeforces C. Cool Partition
目录 题目简述: 思路: 总代码: https://codeforces.com/contest/2117/problem/C 题目简述: 给定一个整数数组,现要求你对数组进行分割,但需满足条件:前一个子数组中的值必须在后一个子数组中…...
如何在Spring Boot中使用注解动态切换实现
还在用冗长的if-else或switch语句管理多个服务实现? 相信不少Spring Boot开发者都遇到过这样的场景:需要根据不同条件动态选择不同的服务实现。 如果告诉你可以完全摆脱条件判断,让Spring自动选择合适的实现——只需要一个注解,你是否感兴趣? 本文将详细介绍这种优雅的…...
compose 组件 ---无ui组件
在 Jetpack Compose 中,确实存在不直接参与 UI 渲染的组件,它们主要用于逻辑处理、状态管理或副作用控制。这些组件虽然没有视觉界面,但在架构中扮演重要角色。以下是常见的非 UI 组件及其用途: 1. 无 UI 的 Compose 组件分类 (…...
网页抓取混淆与嵌套数据处理流程
当我们在网页抓取中,遇到混淆和多层嵌套的情况是比较常见的挑战。混淆大部分都是为了防止爬虫而设计的,例如使用JavaScript动态加载、数据加密、字符替换、CSS偏移等。多层嵌套则可能是指HTML结构复杂,数据隐藏在多层标签或者多个iframe中。 …...
