`
yuanlanxiaup
  • 浏览: 860005 次
文章分类
社区版块
存档分类
最新评论

复合运算符可能产生的结果

 
阅读更多

原题: C语言程序设计_现代方法, 第四章练习题10.

表达式(i++) + (i--)共有多少种可能的值, 假设i初始值为1

影响结果的因素: 双目运算符的两个操作数表达式优先级没有在标准C中定义, 所以, 针对不同实现(不同的编译器)可能会产生不同结果

后缀自增运算符的运算机制: 标准C没有定义后缀自增运算符具体的运算时机, 但是, 能够保证在下一个表达式运算之前, 使其值自增.

需要理解的概念: 任何一个操作数自身也是一个表达式.

因此, 在(i ++) + (i --)这个表达式中, 可能产生不同的因素只有双目运算符+一个.

结果1: 双目运算符左操作数表达式首先进行运算.

i ++ = 1

i = 2 /*在+号右操作数(i --)运算之前, i完成左操作数指定的自增.*/

i -- = 2

i = 1 /*在双目操作符+号运算之前, i完成右操作数指定的自增*/

(i ++) + (i --) = 1 +2 = 3;

结果2: 双目运算符右操作数表达式首先进行运算.

i -- = 1

i = 0 /*在+号做操作数(i ++)运算之前, i完成右操作数指定的自增.*/

i ++ = 0

i = 1 /*在双目操作符+号运算之前, i完成左操作数指定的自增*/

(i ++) + (i --) = 1 + 0 = 1;

两种可能产生的结果中, 在运算完成后, i的值都是1, 因为在表达式中, 有副作用的++和--会互相"抵消".

暂时的理解就是这些, 如果还有可能产生不同结果的其他影响因素, 请看到的朋友mailto: lgg860911@yahoo.com.cn 交流学习.

分享到:
评论

相关推荐

    javascript文档

    复合赋值运算符 复合赋值运算符列表。 concat 方法 (Array) 返回一个由两个数组合并组成的新数组。 concat 方法 (String) 返回一个包含给定的两个字符串连接的String 对象。 条件(三元)运算符 (?:) 根据...

    具有暗光子入口的复合不对称暗物质模型的紫外完成

    复合非对称暗物质场景自然可以解释为什么暗物质质量密度与可见物质质量密度相当。 这种情况通常需要低于综合规模的某种熵... 该模型生成所需的B-L门禁运算符,同时抑制可能冲走生成的B-L不对称性的多余的高维运算符。

    javascript表达式和运算符详解

    复合表达式:原始表达式和原始表达式之间用运算符连接可以组成一个复合表达式。 例如: 10 * 20 这就是一个复合表达式 2.(数组、对象的)初始化表达式。 例如: [1,2] 等价于 new Array(1,2); [1,,,2] ...

    JScript 语言参考

    复合赋值运算符 复合赋值运算符列表。 concat 方法 (Array) 返回一个由两个数组合并组成的新数组。 concat 方法 (String) 返回一个包含给定的两个字符串连接的String 对象。 条件(三元)运算符 (?:) 根据...

    微软JavaScript手册

    复合赋值运算符 复合赋值运算符列表。 concat 方法 (Array) 返回一个由两个数组合并组成的新数组。 concat 方法 (String) 返回一个包含给定的两个字符串连接的String 对象。 条件(三元)运算符 (?:) 根据...

    C语言程序设计标准教程

    第二章: 数据类型、运算符、表达式 C语言的数据类型  在第一课中,我们已经看到程序中使用的各种变量都应预先加以说明,即先说明,后使用。对变量的说明可以包括三个方面: ?数据类型 ?存储类型 ?作用域  在本课...

    C#语言规范(4.0版本)

    7.17.2 复合赋值 221 7.17.3 事件赋值 222 7.18 表达式 222 7.19 常量表达式 223 7.20 布尔表达式 224 8. 语句 225 8.1 结束点和可到达性 225 8.2 块 227 8.2.1 语句列表 227 8.3 空语句 228 8.4 标记语句 228 8.5 ...

    编译原理实验报告(1和2)(可运行).doc

    选择部分C语言的语法成分,设计其词法分析程序,要求能够识别关键字、运算符、分界符、标识符、常量(至少是整型常量,可以自己扩充识别其他常量)等,并能处理注释、部分复合运算符(如>=等)。单词以二元式形式...

    微软C#语言规范,C#语言教程中文版

    7.17.2 复合赋值 221 7.17.3 事件赋值 222 7.18 表达式 222 7.19 常量表达式 223 7.20 布尔表达式 224 8. 语句 225 8.1 结束点和可到达性 225 8.2 块 227 8.2.1 语句列表 227 8.3 空语句 228 8.4 标记语句 228 8.5 ...

    C#语言规范4.0

    7.17.2 复合赋值 221 7.17.3 事件赋值 222 7.18 表达式 222 7.19 常量表达式 223 7.20 布尔表达式 224 8. 语句 225 8.1 结束点和可到达性 225 8.2 块 227 8.2.1 语句列表 227 8.3 空语句 228 8.4 标记语句 228 8.5 ...

    C#语言规范(2.0,3.0,4.0合集)

    7.17.2 复合赋值 221 7.17.3 事件赋值 222 7.18 表达式 222 7.19 常量表达式 223 7.20 布尔表达式 224 8. 语句 225 8.1 结束点和可到达性 225 8.2 块 227 8.2.1 语句列表 227 8.3 空语句 228 8.4 标记语句 228 8.5 ...

    C#_语言规范_4.0_中文版

    7.17.2 复合赋值 221 7.17.3 事件赋值 222 7.18 表达式 222 7.19 常量表达式 223 7.20 布尔表达式 224 8. 语句 225 8.1 结束点和可到达性 225 8.2 块 227 8.2.1 语句列表 227 8.3 空语句 228 8.4 标记语句 228 8.5 ...

    超越有效场论范式的顶夸克局部合成

    在这项工作中,我们认为这种效应可能出现在相对较低的能量下,并产生有趣的现象学后果。 类似于质子电磁相互作用,我们设计了一种简化的现象学模型,该模型用两个形状因子参数化了与胶子的顶夸克相互作用。 我们...

    四费米子算子的共振和非共振新现象用于实验搜索

    为了搜索在最终状态下具有特殊运动分布的复合狄拉克粒子的共振现象,我们讨论了可能的高能过程:多喷流和Dilepton Drell – LHC pp碰撞中的Y过程,e e′的共振截面 e +碰撞消灭了强子和深层的非弹性轻子–强子e–p...

    C#教程(语言规范)

    7.17.2 复合赋值 200 7.17.3 事件赋值 201 7.18 表达式 .. 201 7.19 常量表达式 ... 201 7.20 布尔表达式 ... 202 8. 语句 .. 204 8.1 结束点和可到达性 204 8.2 块 205 8.2.1 语句列表.. 206 8.3 空语句 ....

    C++大学教程,一本适合初学者的入门教材(part2)

    3.8 随机数产生器 3.9 案例:机会游戏与enum简介 3.10 存储类 3.11 作用域规则 3.12 递归 3.13 使用递归举例:Fibonacci数列 3.14 递归与迭代 3.15 带空参数表的函数 3.16 内联函数 3.17 引用与引用参数 ...

    C++大学教程,一本适合初学者的入门教材(part1)

    3.8 随机数产生器 3.9 案例:机会游戏与enum简介 3.10 存储类 3.11 作用域规则 3.12 递归 3.13 使用递归举例:Fibonacci数列 3.14 递归与迭代 3.15 带空参数表的函数 3.16 内联函数 3.17 引用与引用参数 ...

Global site tag (gtag.js) - Google Analytics