• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > C语言运算符的优先级和结合性

C语言运算符的优先级和结合性

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2022-04-30

匿名通过本文主要向大家介绍了等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
本节我们从一个例子入手讲解,请看下面的代码:
#include <stdio.h>int main(){    int a = 16, b = 4, c = 2;    int d = a + b * c;    int e = a / b * c;    printf( "d=%d, e=%d\n", d, e);    return 0;}
运行结果:
d=24, e=8

1) 对于表达式a + b * c,如果按照数学规则推导,应该先计算乘法,再计算加法;b * c的结果为 8,a + 8的结果为 24,所以 d 最终的值也是 24。从运行结果可以看出,我们的推论得到了证实,C语言也是先计算乘法再计算加法,和数学中的规则一样。

先计算乘法后计算加法,说明乘法运算符的优先级比加法运算符的优先级高。所谓优先级,就是当多个运算符出现在同一个表达式中时,先执行哪个运算符。

C语言有几十种运算符,被分成十几个级别,有的运算符优先级不同,有的运算符优先级相同,我们在《C语言运算符的优先级和结合性一览表》中给出了详细的说明,大家可以点击链接自行查阅。

一下子记住所有运算符的优先级并不容易,还好C语言中大部分运算符的优先级和数学中是一样的,大家在以后的编程过程中也会逐渐熟悉起来。如果实在搞不清,可以加括号,就像下面这样:
int d = a + (b * c);
括号的优先级是最高的,括号中的表达式会优先执行,这样各个运算符的执行顺序就一目了然了。

2) 对于表达式a / b * c,查看了《C语言运算符的优先级和结合性一览表》的读者会发现,除法和乘法的优先级是相同的,这个时候到底该先执行哪一个呢?

按照数学规则应该从左到右,先计算除法,在计算乘法;a / b的结果是 4,4 * c的结果是 8,所以 e 最终的值也是 8。这个推论也从运行结果中得到了证实,C语言的规则和数学的规则是一样的。

当乘法和除法的优先级相同时,编译器很明显知道先执行除法,再执行乘法,这是根据运算符的结合性来判定的。所谓结合性,就是当一个表达式中出现多个优先级相同的运算符时,先执行哪个运算符:先执行左边的叫左结合性,先执行右边的叫右结合性。

/和*的优先级相同,又都具有左结合性,所以先执行左边的除法,再执行右边的乘法。

3) 像 +、-、*、/ 这样的运算符,它的两边都有要计算的数据,每份这样的数据都称作一个操作数,一个运算符需要 n 个操作数就称为 n 目运算符。例如:
  • +、-、*、/、= 是双目运算符;
  • ++、-- 是单目运算符;
  • ? : 是三目运算符(这是C语言里唯一的一个三目元算符,后续我们将会讲解)。

总结

当一个表达式中出现多个运算符时,C语言会先比较各个运算符的优先级,按照优先级从高到低的顺序依次执行;当遇到优先级相同的运算符时,再根据结合性决定先执行哪个运算符:如果是左结合性就先执行左边的运算符,如果是右结合性就先执行右边的运算符。

C语言的运算符众多,每个运算符都具有优先级和结合性,还拥有若干个操作数,为了方便记忆和对比,我们在《C语言运算符的优先级和结合性一览表》中将它们全部列了出来。对于没有学到的运算符,大家不必深究,一带而过即可,等学到时再来回顾。
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-28学习C和C++的9点经验总结
  • 2017-05-28解析Linux下的时间函数:设置以及获取时间的方法
  • 2017-05-28C++多字节字符与宽字节字符相互转换
  • 2017-05-28将正小数转化为2-9进制小数的实现方法
  • 2017-05-28C++中Socket网络编程实例详解
  • 2017-05-28详解C++编程中的文件流与字符串流
  • 2017-05-28linux下实现的2048游戏示例分享
  • 2017-05-28基于条件变量的消息队列 说明介绍
  • 2017-05-28深入二叉树两个结点的最低共同父结点的详解
  • 2017-05-28深入学习C语言中memset()函数的用法

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 解析C++中虚析构函数的作用
    • C语言中字符和字符串处理(ANSI字符和Unicode字符)
    • C语言模拟实现C++的继承与多态示例
    • typedef和#define的用法以及区别
    • vc中SendMessage自定义消息函数用法实例
    • 深入内存对齐的详解
    • 关闭显示器软件代码分享
    • C++递归删除一个目录实例
    • C++求四个正整数最大公约数的方法
    • 基于C++中常见内存错误的总结

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有