求救啊!!这个运算式有详解吗??

Home Home
引用 | 编辑 billy7074396
2013-11-02 17:40
楼主
推文 x0
  这样的答案会是64


  但是我用手算实在是不知道为甚么会是64

..

访客只能看到部份内容,免费 加入会员



献花 x0
引用 | 编辑 ebolaman
2013-11-03 14:35
1楼
  
(1.) 等于 a = y *= (x%y > x-y ? --x : y++);
(2.) 等于 a = y *= (0 ? --x : y++);
(3.) 等于 a = y *= y++;

注意不同的编译环境下可能对 y *= y++ <Y = -8> 有不同的定义
例如在 GNU C++ 中结果是 56
在 GNU C 中结果是 64
在 Visual Studio C++ 中结果是 64

手算的话,(1.) 看起来等于 (2.) 但是实际上组合语言完全不同,答案会有落差,
(2.) 会被编译器优化成 (3.) 造成手算答案难以判断

此题实际正解是 56 (GNU C/C++ & VS C++)
程式设计上最好避免这种状况,以免在不同的编译环境下产生不同的结果

详细请参考 C/C++ Sequence Point 和 Side Effects

献花 x1
引用 | 编辑 billy7074396
2013-11-04 21:55
2楼
  
感谢感谢!!! 分析得很清楚!!!

因为考试题库有这题 可我就是算出来却总是怪怪的! > <

感谢解答~~

献花 x0