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

c语言运算符优先级

1、运算符介绍

        在C语言中,运算符优先级是指在表达式中执行运算的先后顺序。按照C语言的标准规范,不同的运算符被赋予了不同的优先级等级,优先级高的运算符会先进行运算。如果同一优先级的运算符出现在同一个表达式中,则按照从左到右或从右到左的结合性进行处理。

2、C语言运算符及其优先级

1) 最高优先级 - 圆括号和类型转换
  • 运算符( )(括号)、typecast(类型转换)
  • 示例:
    1int a = 10, b = 20;
    2int c = (a + 5) * b; // 先计算括号内的a+5,然后乘以b
    3char d = 'A';
    4int e = static_cast<int>(d); // 类型转换
2) 第二高优先级 - 一元运算符
  • 运算符++(前缀递增)、--(前缀递减)、+(正号,对于数值无效)、-(负号)、!(逻辑非)、~(按位取反)、*(指针解引用)、&(取地址)
  • 示例:
    1int x = 10;
    2int y = ++x; // 先递增x,再赋值给y,所以y=11
    3int z = *(&x); // 取x的地址,然后解引用,z仍等于11
3) 第三优先级 - 算术运算符
  • 运算符*(乘法)、/(除法)、%(模运算)
  • 示例:
    1int m = 10, n = 3;
    2int p = m * n / 2; // 首先计算乘法m*n得到30,再除以2,p=15
4) 第四优先级 - 加法和减法
  • 运算符+(加法)、-(减法)
  • 示例:
    1int o = 10, q = 5;
    2int r = o + q - 3; // 先计算加法o+q得到15,再减去3,r=12
5) 第五优先级 - 移位运算符
  • 运算符<<(左移)、>>(右移)
  • 示例:
    1unsigned int u = 10;
    2int shift = 2;
    3int s = u << shift; // 将u左移两位,s=40(假设int为32位)
6) 第六优先级 - 关系运算符和等于运算符
  • 运算符<(小于)、>(大于)、<=(小于等于)、>=(大于等于)、==(等于)、!=(不等于)
  • 示例:
    1if (m <= n && n != 0) { /* ... */ } // 先判断m是否小于等于n,然后判断n是否不等于0
7) 第七优先级 - 逻辑与 (&&)
  • 运算符&&(逻辑与)
  • 示例:
    1bool cond1 = true, cond2 = false;
    2if (cond1 && cond2) {} // 由于逻辑与,如果cond1为真,则检查cond2,此处不会执行if块
8) 第八优先级 - 逻辑或 (||)
  • 运算符||(逻辑或)
  • 示例:
    1if (cond1 || cond2) {} // 如果cond1为真,由于逻辑或,不会检查cond2,直接执行if块
9) 第九优先级 - 条件运算符
  • 运算符?:(三元运算符)
  • 示例:
    1int val = cond1 ? m : n; // 如果cond1为真,则val=m,否则val=n
10) 第十优先级 - 赋值运算符和其他复合赋值运算符
  • 运算符=(赋值),=+=-=*=/=%=<<=>>=&=^=|=
  • 示例:
    1int v = 0;
    2v += m; // 等价于 v = v + m
11) 最低优先级 - ,(逗号运算符)
  • 运算符,(逗号)
  • 示例:
    1int i = 0, j = 1;
    2int k = (i = 5, j = 10, i + j); // 先计算i=5,然后j=10,最后返回i+j的结果15

根据上述排序,优先级是从上至下逐渐降低的。例如,乘法和除法运算符的优先级高于加法和减法运算符。这意味着在没有括号的情况下,乘法和除法会先于加法和减法进行计算。同样地,一元运算符(如 !++)的优先级高于任何二元运算符(如 +*)。在优先级相同的运算符之间,通常按照运算符的结合性(左结合或右结合)决定运算顺序。例如,逻辑与 && 和逻辑或 || 同属一个优先级,它们都是左结合的,因此会从左向右评估。

注意:C和C++中的运算符优先级基本一致,这里的示例适用于两种语言。要详细了解所有C语言运算符及其完整的优先级列表,请查阅官方文档或相关参考资料。

http://www.lryc.cn/news/326187.html

相关文章:

  • 纳斯达克大屏媒体尺寸与投放费用:一次投放需要多少钱?
  • 将word转为PDF的几种简单方式
  • 大型集团公司企业文化知识竞活动赛策划方案
  • Spring Boot设置io临时目录
  • Polar 2024春季个人挑战赛 Jay17 WP
  • 10 mybatis 日志
  • AJAX介绍使用案例
  • 【echart】数据可视化
  • 排序(冒泡/快速/归并)
  • jq中的跨域
  • CUDA学习笔记08: 原子规约/向量求和
  • PointNet++论文复现(一)【PontNet网络模型代码详解 - 分类部分】
  • AI渣土车监测报警摄像机
  • Spring框架介绍及详细使用
  • 【论文速读】| 对大语言模型解决攻击性安全挑战的实证评估
  • 小迪安全48WEB 攻防-通用漏洞Py 反序列化链构造自动审计 bandit魔术方法
  • 微服务:解放软件开发的神器,引领企业级应用的未来(二)
  • easyexcel与vue配合下载excel
  • Vue.js 模板语法
  • 信号处理--基于DEAP数据集的情绪分类的典型深度学习模型构建
  • Spring设计模式-实战篇之模板方法模式
  • PTA天梯赛习题 L2-006 树的遍历
  • js相关的dom方法
  • Django——Ajax请求
  • 基于java多角色学生管理系统论文
  • python(django)之单一接口管理功能后台开发
  • 教程1_图像视频入门
  • MQTT.fx和MQTTX 链接ONENET物联网提示账户或者密码错误
  • Svn添加用户、添加用户组、配置项目权限等自动化配置脚本
  • Spring事务-两种开启事务管理的方式:基于注解的声明式事务管理、基于编程式的事务管理