我的编程空间,编程开发者的网络收藏夹
学习永远不晚

C语言中-a++和-++a运算顺序实例解析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

C语言中-a++和-++a运算顺序实例解析

前言

-a++ ,如果a=3,那么-a++输出的结果是多少? -3还是-4?

一、首先

先来了解一下算术运算符的优先级和结合性:

运算符优先级结合性
++、--、+(正)、-(负)同级

^

|

|

右结合
*、/、%同级左结合
+(加)、-(减)同级左结合

右结合*、/、%同级左结合+(加)、-(减)同级左结合

在C语言中,计算表达式的值也需要按运算符的优先级从高到低的顺序进行计算。

例如,表达式 a+b*c 相当于 a+(b*c).

若操作数两侧运算符的优先级相同,则按结合性(结合方向)决定计算顺序,

若结合方向为“从左到右”,则操作数先与左边的运算符结合;

若结合方向为“从右到左”,则操作数先与右边的运算符结合;

例如,表达式-a++,- 与 ++ 同级,此时按结合方向决定计算顺序(右结合),相当于 -(a++)。

二、其次

我们来运行一下 -a++ 感受一下:

#include <stdio.h>
 
int main() {
    int a = 3;
    int b = 5;
    printf("%d\n",-a++);
    printf("%d\n",a);
 
    printf("%d\n",-++b);
    printf("%d\n",b);
    return 0;
}

在运行结果出来之前,我们先来猜猜输出结果是怎样的? -4  4 -6  6 ?如果是这样的话大概忘记了++前置和后置了?

运行结果:

使用的编译软件:CLion

~~~结果有疑惑?请看下方解惑~~~

(初学者提示:下图中左边箭头所指即当前程序运行到这一行,运行到当前行时右边会有变量当前取值。)

图1: 此时我们发现 -a++ 中,a的值还是3,这是因为 a++ ,++后置,

所以在这里print 输出结果是-3,

图2:在这第6行运行完后,a++生效,也就是a=a+1,这时候a=4,所以在这里第7行运行print输出的结果是4。

 图3:这里这个b是为了对比-a++的结果的。-++b,意思是 -(++b),++前置,那么我们先b=b+1,这时候b=6,再走-b的输出。也就是print 输出 -6。

 图4:这里输出b,此时我们从第9行时b已经++b,因此b=5+1=6,所以在这里输出为6。

补充:下面讲解下3-3的例题

int a = 100; 最开始时a是100。

打印 a++;  这个printf会打印a++的值,注意是a++表达式的值,看我前面的讲解,a++的值就是a的值,也就是100。 别忘了这语句结束后a的值就会自增1(也就是副作用发生了)。

打印 ++a;  目前a的值为101。现在要打印++a表达式的值,++a的值就等于a+1,所以会打印出102。 此语句后a=101+1=102。

打印 --a;  这次要打印--a表达式的值,同自增一个道理,--a的值等于a-1,所以会打印出101。 此语句后a=102-1=101。

打印 a--;  a--表达式的值就是a的值,所以打印出101。 此语句后a=101-1=100。

打印 a+1;  这表达式与自增无关,只是打印a+1的值,就是101。 对a本身的值没有影响(加法表达式没有副作用)。

打印 a;  这时a的值当然还是100了。

最后

综上,-a++ ,如果a=3,那么-a++输出的结果是-3,运算顺序还是 -(a++),只是++后置,此时a=a+1要在执行完这一行才执行,如果是++前置,那么也就是 -++a 的情况,那么输出的结果就是-4。

到此这篇关于C语言中-a++和-++a运算顺序的文章就介绍到这了,更多相关C语言-a++和-++a运算顺序内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

C语言中-a++和-++a运算顺序实例解析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C语言中-a++和-++a运算顺序实例解析

C语言中的a++和++a的区别在于混合表达式中运算符的处理顺序,下面这篇文章主要给大家介绍了关于C语言中-a++和-++a运算顺序的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
2022-11-13

C语言中++a和a++的区别解析

c语言中++a和a++的区别:++a:先递增a的值,再返回递增后的值。a++:先返回a的当前值,再递增a的值。C语言中++a和a++的区别解析理解C语言中的++a和a++都是单目递增运算符。它们的目标是修改变量a的值,使a增加 1。区
C语言中++a和a++的区别解析
2024-04-03

C语言中*和&运算符解析与比较

在c语言中,星号(*)运算符用于解引用指针变量,获取所指向变量的值;地址运算符(&)用于获取变量地址。具体比较如下:解引用指针:*取地址:&指针乘法:*位运算:&C语言中*和&运算符解析与比较在C语言中,星号(*)运算符和地址运算符(&)
C语言中*和&运算符解析与比较
2024-04-03

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录