在学C语言开始的时候我们都会遇到求到给任意整数值(n++)+(n++)+(n++)与(++n)+(++n)+(++n)的值。

首先,我们复习下运算符++n与n++的区别。

运算符++n是n自加1之后再参与运算,而n++是n先参与运算,再自加1,再参与其他运。

假设n=5;

(n++)+(n++)+(n++)一般我们第一反应就是6+6+6=18;但是实际上结果确实是18;但是运算结果不是这样的,正确顺序是5+6+7=18,。为什么是这样呢?

我们一步步来计算:

首先计算(n++)+(n++),我们知道括号的运算等级优先于+和++,n++又是n先参与运算,再自加。所以(n++)+(n++)的应该结果是10,但实际是11。

这个地方运算符的右结合性要高于运算等级的限制,所以变成先把括号里n的值先参与括号外+的运算,然后第一个括号里n++之后n变为6给第二个括号里n,

然后第二个括号里n先参与括号外运算,然后n自加给第三个括号里n,以此类推,实际数值计算就是5+6+7,如果在后面再加一个(n++),数值运算就变成了5+6+7+8。

(++n)+(++n)+(++n)我们先进行(++n)+(++n)这一部分吗,这个时候编译器会先进行完两个括号里的所有自加运算,然后在进行括号外的+运算,进行两次自加运算,

n值变为7,此时变成了7+7=14;然后在进行第三个括号里的(++n)自加运算,n值变为8,就成为7+7+8=22,如果在后面在加上一个(++n),就变成7+7+8+9=31,以此类推。

终上所述,我们发现,这种运算的难点在意我们不知道开始的第一步的运算,以至于后面的计算就难以进行,建议大家还是打开编译器多敲几遍就知道了。

附上代码

#include<stdio.h>
int main()
{
    int m=5,n=5,p,q;
    p=(m++)+(m++)+(m++);
    q=(++n)+(++n)=(++n);
    printf("%d %d\n",q,n);
    printf("%d %d",p,m);
    return 0;
}

m,n变量都是全局变量。

(n++)+(n++)+(n++)与(++n)+(++n)+(++n)的区别相关推荐

  1. golang通过RSA算法生成token,go从配置文件中注入密钥文件,go从文件中读取密钥文件,go RSA算法下token生成与解析;go java token共用

    RSA算法 token生成与解析 本文演示两种方式,一种是把密钥文件放在配置文件中,一种是把密钥文件本身放入项目或者容器中. 下面两种的区别在于私钥公钥的初始化, init方法,需要哪种取哪种. 通过 ...

  2. 使用Maven打包生成的-SNAPSHOT.jar与-RELEASE.jar分别代表什么?SNAPSHOT是什么意思?RELEASE是什么意思?

    使用Maven打包后生成 XXXXXXX-1.0.0-SNAPSHOT.jar 和 XXXXXXX-1.0.0-RELEASE.jar 的区别???? 首先,根本原因:这是因为你的pom.xml中的项 ...

  3. docker镜像的备份和恢复

    在使用docker的时候总会出现这种情况:下载东西很慢很慢,下载完配置完以后,突然,一个地方配置出现了问题,无法恢复,需要重新装载,那么,之前的所有配置.安装.下载都没了,又是一个大活~ 该怎么办呢? ...

  4. UUID的使用及其原理

    今天敲项目要用UUID,想起之前老师告诉UUID的使用,但没说具体的生成逻辑,于是我进行了百度 首先,UUID的使用: //生成随机的UUID String uuid = UUID.randomUUI ...

  5. CentOS Docker安装配置部署Golang web helloworld

    目录[阅读时间:约5分钟] 一.Docker简介 二.Docker的安装与配置[CentOS环境] 三.Docker部署Golang web helloworld 四.Docker与虚拟机的区别 五. ...

  6. 基于Golang的CLI 命令行程序开发

    基于Golang的CLI 命令行程序开发 [阅读时间:约15分钟] 一. CLI 命令行程序概述 二. 系统环境&项目介绍&开发准备 1.系统环境 2.项目介绍 3.开发准备 三.具体 ...

  7. 中级实训第一天的自学报告

    目录[阅读时间:约10分钟] 中级实训第一天的自学报告 姓名:隐藏敏感信息 学号:隐藏敏感信息 一.Vi/Vim 二.Java 三.Ant 四.Junit [附加]五.SonarQube [附加]六. ...

  8. Go语言的错误异常处理机制及其应用

    一.背景 在日常编写golang程序或阅读别人的golang代码时,我们总会看到如下的一堆代码块: xx, err = func(xx) if err != nil {//do sth. to tac ...

  9. c语言中external,static关键字用法

    static用法: 在C中,static主要定义全局静态变量.定义局部静态变量.定义静态函数. 1.定义全局静态变量:在全局变量前面加上关键字static,该全局变量变成了全局静态变量.全局静态变量有 ...

  10. 2022-2028年中国儿童保健品行业市场研究及前瞻分析报告

    [报告类型]产业研究 [报告价格]4500起 [出版时间]即时更新(交付时间约3个工作日) [发布机构]智研瞻产业研究院 [报告格式]PDF版 本报告介绍了中国儿童保健品行业市场行业相关概述.中国儿童 ...

最新文章

  1. Codeforces 862B - Mahmoud and Ehab and the bipartiteness
  2. 帝国 php 7.0 默认 后台用户名及认证码,帝国CMS后台管理员帐号密码、认证码、安全答案忘记了怎么办?...
  3. memset、memcpy、strcpy、HeapAlloc
  4. linux网络配置、测试及故障诊断方法和工具三
  5. 干货 | 携程异地多活-MySQL实时双向(多向)复制实践
  6. (转)怎么实时查看mysql当前连接数
  7. 【一分钟了解】1em等于多少px,由什么决定?
  8. QT的QSplitter类的使用
  9. TCC分布式实现原理及分布式应用如何保证高可用
  10. php 字符串比较txt,PHP读到txt中文字符串比较失败
  11. Oracle 12c与GoldenGate 12c的一些问答
  12. yuan的第二次随笔
  13. C# .net实现发送手机短信功能
  14. 有公网IP内网穿透配置
  15. AirPods Pro 一直断线?如何修复
  16. 通过人工智能实现内容智能审核及在世界杯的实战
  17. 挂载ISO镜像文件作为本地yum源
  18. 遗传算法(GA)求解TSP问题
  19. JAVA+MySQL综合笔记
  20. 前58技术委员会主席多次强调的Java核心,你精通吗?

热门文章

  1. 高通开发系列 - Unpacking Tools拆包工具的制作
  2. mac运行ps特别慢_的Photoshop在Mac上运行速度慢|优化Mac上的Photoshop
  3. linuxMint在虚拟机下装VMware Tolls
  4. C++之 system(“pause“); 与 getchar(); 防止控制台闪退
  5. C/C++键盘输入含空格的字符串的各种方法
  6. 调用浏览器下载图片 java实现
  7. 大城市容不下肉体,小城市容不下灵魂
  8. 谷歌浏览器adobe flash过期解决办法
  9. 小米8无法开启位置服务器,小米8 WIFI 蓝牙打不开 GPS无法使用
  10. 【大数据面试题】(二)Hive 相关面试题总结