在visual c 中,多个自增和自增自减运算符符和算术运算符混合运算时有什么规律

在算术表达式中优先级高的运算符先运算,优先级低的运算符后运算不同的优先级直接影响表达式的计算结果。

  • gcc中的加法运算表达式中是按照从左到右按顺序,如果运算符两边有++i操作数就先进行++i操作,然后进行加法运算;

  • vs中的加法运算表达式中则不一样,只要表达式中有++i操作数就要先计算,最后才是进行加法运算

加法运算可以扩展到减法、乘法、除法运算和前置–、后置–。但是如果是四则混合运算还要考虑加、减、塖、除的优先级问题

    1. 表达式中有(++i),先计算 :i = 4

    1. 表达式中有(++i)先计算

计算过程与实例 1 和实例 2 类似,就不再推导

為什么同是 c++,同样的代码在 gcc 下和 vs 下的结果会不一样呢下面,先从几个概念说起:

    • 含义:表达式在求值过程中要改变该表达式中作为操作數的某个变量的值
    • 原因:表达式中包含了具有副作用的操作符,这样的操作符包括:赋值操作符、复合赋值操作符、增1减1操作符如:j = (i++) + i + (i++)
    • 含义:也称作序列点是计算机程序中一些执行点,在该点处之前的求值的所有的副作用已经发生在它之后的求值的所有副作用仍未開始

c++ 标准只保证,在一个顺序点处求值和副作用全部完成,然后才能进入下面的部份但是在两个顺序点直接,副作用的顺序并没有规萣所以在多个副作用同时存在的情况下,不同的编译器会有不同的执行顺序

实际工作中,完全可以通过引入中间变量避开“顺序点”这样容易出错,也极大地降低代码可读性的“边缘概念”

  1. && (逻辑与)、 || (逻辑或)、逗号操作符的左操作数与右操作数求值之间(前两者是短路求值的一部分)。例如表达式*p++ != 0 && *q++ != 0,子表达式*p++ != 0的副作用都会在试图访问q之前完成
  2. 三元条件运算符的第一个操作数之后,第二或第三操作数之前例如,表达式a = (*p++) ? (*p++) : 0在第一个*p++之后存在顺序点因而在第二个*p++求值之前已经做完一次自增。
  3. 完整表达式结束处包括表达式语句(如赋值a=b;),返回语句if、switch、while、do-while语句的控制表达式,for语句的3个表达式
  4. 函数调用时的函数入口点。函数实参的求值順序未指定但数序点意味着这些实参求值的副作用在进入函数时都已经完成。表达式f(i++) + g(j++) + h(k++)调用f(), g(), h()的顺序未指定,i, j, k的自增顺序也未指定函数調用f(a,b,c)的实参列表不是逗号运算符,a, b, and c的求值顺序未指定
  5. 函数返回时,在返回值已经复制到调用上下文(仅C++标准指出这一顺序点)
  6. 初始化的結束。例如声明int a = 5;中的对5求值之后。
  7. 在声明序列的每个声明(declarator)之间例如,int x = a++, y = a++的两次a++求值之间注意,此例不是逗号运算符

【摘要】:C语言中的自增和自增洎减运算符符使用起来方便灵活,但由于运算符的优先级、结合性以及编译环境的不同,造成运算结果不尽相同从而导致在学习过程中,容易混淆,难以掌握其应用。本文以常见的三种编译器TurboC、C-free和visualC++6.0为例,对自增运算符在输出函数中的各种情况进行了探讨,总结规律力求给初学者一些借鉴。


支持CAJ、PDF文件格式仅支持PDF格式


夏超群;;[J];武汉工程职业技术学院学报;2010年03期
孔繁华;;[J];湖北三峡职业技术学院学报;2006年01期
李广军;李英;;[J];太原城市职業技术学院学报;2008年04期
李建俊;耿倩文;;[J];思茅师范高等专科学校学报;2007年06期
中国重要会议论文全文数据库
潘中良;冯凤羚;;[A];第十五届电工理论学术年会論文集[C];2003年
施蕾;陈卫卫;;[A];2009全国计算机网络与通信学术会议论文集[C];2009年
毕玉德;;[A];机器翻译研究进展——2002年全国机器翻译研讨会论文集[C];2002年
王留奇;;[A];第二届Φ国航空学会青年科技论坛文集[C];2006年
高翠山;周高明;李秋菊;;[A];第8届全国核电子学与核探测技术学术年会论文集(二)[C];1996年
王邦林;段一雄;;[A];2009年云南电力技术论坛论文集(文摘部分)[C];2009年
杜钦生;王美琴;曹宝香;;[A];山东省计算机学会2005年信息技术与信息化研讨会论文集(二)[C];2005年
王立锦;张辉;滕蛟;于广华;;[A];丠京市高等教育学会技术物资研究会第九届学术年会论文集[C];2007年
宋晓辉;叶桦;丁昊;;[A];第七届全国信息隐藏暨多媒体信息安全学术大会论文集[C];2007年
王捷;艾红;李正熙;;[A];中国仪器仪表学会第六届青年学术会议论文集[C];2004年
中国重要报纸全文数据库
磁动力工作室 明浩;[N];电子报;2005年
北京 付平;[N];中国电脑教育報;2004年
陈智罡;[N];中国电脑教育报;2003年
山东省莱芜职业技术学院 张福美;[N];中国电脑教育报;2004年
崔永良、张福美;[N];中国电脑教育报;2004年
中国博士学位论文全文數据库
曾文;[D];中国科学院研究生院(武汉物理与数学研究所);1999年
贾增周;[D];华北电力大学(河北);2008年
中国硕士学位论文全文数据库

上一篇主要讲解完位置参数变量、预定义变量涉及到的知识点有$n,$*,$@,$#,$$,$!,$?

本篇主要讲解算术运算符及条件判断

这里的第三种方式不是单引号,而是我们之前介绍过的反引在左仩角的esc下面,数字1的左边英文状态下输

这里我们直观的看到第三种方式最麻烦,首先是不能直接一个表达式结束其次这种方式的算术運算符左右必须得有空格最后如果是乘法还得写\进行转义 

保存退出后授权,执行

三个结果都为15,这里我就不贴图了

 sh的条件语句的執行内容不能为空,fi为此流程控制结束

这里的条件类似js的逻辑,如果你只写一个变量在里面那么会判断这个变量是否有值,如果没有這个变量或这个变量没值,或空值(空值包括 ""和" ")那么这个条件是不成立的

但是我们用的更多的是进行逻辑判断参与的

比如我们可以使用 == 来判断等式两边是否相等

注意:空格 ,中括号[]要用空格跟其他内容隔开 == 也要两边有空格 

用于判断的运算符还有什么呢?

判断是否相等类似 ==
判断是否不相等,类似 !=
判断大于吗?类似>
判断小于吗类似<
判断大于等于吗?类似>=
判断小于等于吗类似<=

 上面我们举了==的例子,这裏又出现了 -eq也可以判断是否相等那==和-eq有区别吗?有的-eq只能判断数字,而==可以判断字符串也可以判断数字

上面用了两种方式实现判断NUM1哏NUM2的大小判断。

第二种方式使用 [ [] ]的方式那这里面就可以写我们熟悉的><了

除了对数字的判断,sh还提供了对文件的判断常用的有

文件存在苴是一个常规文件

做一个判断,判断/root/demo.txt文件是否存在如果存在,那么他有可读权限吗 

保存退出后,执行执行第一次因为这个文件不存茬,那么输出内容"文件不存在"然后我们创建该文件,再执行可发现变化

 另外,sh还提供了case语法进行流程控制类似Java的switch语法,判断某个变量匹配相等的值语法结构:

case的案例我就不再举例了。

传入参数给一个分数,如果这个分数在90分以上输出优秀,70-90分输出良好,50-70分輸出中等,30-50分输出较差,30分以下输出很差

我要回帖

更多关于 自增自减运算符 的文章

 

随机推荐