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

【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语言运算符优先级详解

文章目录 &#x1f4dd;前言&#x1f309;运算符优先级简述 &#x1f320;逻辑与和逻辑或&#x1f309;赋值和逗号运算符 &#x1f320;位运算&#x1f309;条件表达式&#x1f309;位运算与算术运算结合&#x1f309;混合使用条件表达式和赋值运算符&#x1f309; 逗号运算符的…...

第十节HarmonyOS 常用容器组件3-GridRow

1、描述 栅格容器组件&#xff0c;仅可以和栅格子组件&#xff08;GridCol&#xff09;在栅格布局场景中使用。 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&#xff08;NI&#xff09;公司生产的屏蔽式电缆。这款电缆通常用于连接数据采集设备和传感器或执行器&#xff0c;以实现信号传输和数据采集。SCXI-1193 电缆具有高度灵活…...

使用clion开发tftlcd屏,移植驱动时遇到的问题记录

问题现象 屏幕只有一半屏在刷新 问题出现的情况(在CLION开发时遇到过) 总结...

工程信号的去噪和(分类、回归和时序)预测

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

【VUE】前端阿里云OSS断点续传,分片上传

什么是OSS&#xff1a; 数据以对象&#xff08;Object&#xff09;的形式存储在OSS的存储空间&#xff08;Bucket &#xff09;中。如果要使用OSS存储数据&#xff0c;您需要先创建Bucket&#xff0c;并指定Bucket的地域、访问权限、存储类型等属性。创建Bucket后&#xff0c;您…...

春招面试高频题目总结

面试问题 redis 可以用于进程间通信吗&#xff1f; Why&#xff1f;How? ---> 延展一下 有哪些进程间通信技术, 优劣如何&#xff1f; 有大量的插入sql语句&#xff0c;一条条的插入性能很差&#xff0c;如何通过事务进行优化&#xff1f; 保证线程安全的策略有哪些&…...

基于SSM+Jsp+Mysql的KTV点歌系统

基于SSMJspMysql的KTV点歌系统 基于SSMJspMysql的KTV点歌系统的设计与实现 开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工…...

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外包的隐形重负——沟通成本&#xff1a;当客户仅能提供大致需求&#xff0c;而IT公司则机械地执行&#xff0c;往往会导致项目细节中充满漏洞&#xff0c;用户体验大打折扣。 最终&#xff0c;项目不断延期&#xff0c;进度一拖再拖。探究其根源&#xff0c;客户往往并非IT…...

C++关键字:const

文章目录 一、const的四大作用1.修饰 变量、数组2.修饰 函数的形参、修饰 引用 (最常用&#xff09;3.修饰 指针&#xff1a;常量指针、指针常量 、只读指针4.修饰 类的成员函数、修饰 类的对象 一、const的四大作用 1.修饰 变量、数组 1.const修饰变量&#xff1a; 被const修…...

nodejs 常用命令

Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境&#xff0c;常用于服务器端编程。以下是一些 Node.js 的常用命令 1、安装 Node.js&#xff1a; 通常&#xff0c;你会从 Node.js 的官方网站下载并安装适合你操作系统的版本。安装完成后&#xff0c;你可以在命令行中…...

nginx配置详解+nginx_lua模块的使用

nginx基本配置详解 目录 nginx基本配置详解 nginx_lua模块使用方式 openresty介绍与安装 lua基本语法使用 全局配置&#xff1a; user&#xff1a;指定Nginx主进程运行的用户。在下方示例中&#xff0c;Nginx将以root用户身份运行。worker_processes&#xff1a;指定Ngi…...

大数据--hdfs--java编程

环境&#xff1a; virtualbox ubantu1604 Linux idea社区版2023 jdk1.8 hadoop相关依赖 使用java操作 1. 判断/user/stu/input/test.txt文件是否存在&#xff0c;存在则读出文件内容&#xff0c;打印在控制台上。反之&#xff0c;输出“文件不存在”。 package abc;impo…...

力扣由浅至深 每日一题.10 最后一个单词的长度

日子都是崭新的&#xff0c;我们下一章见 ——24.3.21 最后一个单词的长度 给你一个字符串 s&#xff0c;由若干单词组成&#xff0c;单词前后…...

21 OpenCV 直方图均衡化

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

对七层代理、四层代理、正向代理、反向代理的认识

一、理解nginx服务代理 Nginx代理有正向和反向代理两种类型&#xff0c;可以基于osi七层模型中的第四层&#xff08;传输层&#xff09;和第七层&#xff08;应用层&#xff09;进行代理 注&#xff1a; nginx 一般支持的是7层代理&#xff0c;支持四层代理一般使用 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-正念冥想有用吗?对健康的影响及科学指南

点一下关注吧&#xff01;&#xff01;&#xff01;非常感谢&#xff01;&#xff01;持续更新&#xff01;&#xff01;&#xff01; &#x1f680; AI篇持续更新中&#xff01;&#xff08;长期更新&#xff09; 目前2025年06月05日更新到&#xff1a; AI炼丹日志-28 - Aud…...

[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解

突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 ​安全措施依赖问题​ GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

LeetCode - 199. 二叉树的右视图

题目 199. 二叉树的右视图 - 力扣&#xff08;LeetCode&#xff09; 思路 右视图是指从树的右侧看&#xff0c;对于每一层&#xff0c;只能看到该层最右边的节点。实现思路是&#xff1a; 使用深度优先搜索(DFS)按照"根-右-左"的顺序遍历树记录每个节点的深度对于…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针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&#xff09;下载安装包2&#xff09;配置环境变量3&#xff09;安装镜像4&#xff09;node.js 的常用命令 2. 安装 http-server 服务3. 使用 http-server 开启服务1&#xff09;使用 http-server2&#xff09;详解 …...

Web后端基础(基础知识)

BS架构&#xff1a;Browser/Server&#xff0c;浏览器/服务器架构模式。客户端只需要浏览器&#xff0c;应用程序的逻辑和数据都存储在服务端。 优点&#xff1a;维护方便缺点&#xff1a;体验一般 CS架构&#xff1a;Client/Server&#xff0c;客户端/服务器架构模式。需要单独…...

Kubernetes 节点自动伸缩(Cluster Autoscaler)原理与实践

在 Kubernetes 集群中&#xff0c;如何在保障应用高可用的同时有效地管理资源&#xff0c;一直是运维人员和开发者关注的重点。随着微服务架构的普及&#xff0c;集群内各个服务的负载波动日趋明显&#xff0c;传统的手动扩缩容方式已无法满足实时性和弹性需求。 Cluster Auto…...

面试高频问题

文章目录 &#x1f680; 消息队列核心技术揭秘&#xff1a;从入门到秒杀面试官1️⃣ Kafka为何能"吞云吐雾"&#xff1f;性能背后的秘密1.1 顺序写入与零拷贝&#xff1a;性能的双引擎1.2 分区并行&#xff1a;数据的"八车道高速公路"1.3 页缓存与批量处理…...

热门Chrome扩展程序存在明文传输风险,用户隐私安全受威胁

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