首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

表达式的求值顺序,该如何处理

2012-02-29 
表达式的求值顺序书中说如果表达式X+Y的结果大于整型所能容纳的值,它就会产生溢出.在有些机器上,下面这个

表达式的求值顺序
书中说如果表达式X+Y的结果大于整型所能容纳的值,它就会产生溢出.在有些机器上,下面这个测试if(x+y+1>0)的结果将取决于先计算x+y还是y+1,因为在两种情况下溢出的地点不同. 
如,signed int值为-32768---32767 X(32767)+Y(1)的值为32768,即-32768再加1,得-32767 
和先运算Y+1=2,在加X得-32767 两个溢出点不是一样的.为什么会有两个不同的溢出点.
如何理解,不管是先运行哪个,不是只有一个溢出点吗

[解决办法]
如果真的出现了 x + ( y + 1 ) 的情况,某些平台下结果和 ( x + y ) + 1 的确有可能不同,毕竟溢出的后果是未定义的。
有些系统就约定溢出的结果是封顶,而不是截断,这种情况下 32767 + 1 就还是 32767。

热点排行