永发信息网

今天遇到一个题,int i = 3; 求i---i的值,我自己算的是1,答案算的是0;

答案:6  悬赏:20  手机版
解决时间 2021-11-29 14:46
  • 提问者网友:送舟行
  • 2021-11-28 23:28
今天遇到一个题,int i = 3; 求i---i的值,我自己算的是1,答案算的是0;
最佳答案
  • 五星知识达人网友:旧脸谱
  • 2021-11-29 00:57
上面说的都对。但是貌似最合理的应该是(i--)-i因为在《C的陷阱与缺陷》中提到了一种编译原理叫贪心算法,它会找最长的系统所能识别的运算符,所以这里最长的运算符应该是-- 用gcc编译后也是0.
全部回答
  • 1楼网友:猎心人
  • 2021-11-29 06:08
很简单的,先算--i,算完后i的值2,前面的i也是2,所以2-2=0
  • 2楼网友:夜余生
  • 2021-11-29 04:39
和编译器有关。。。不要去深究这个东西,没有任何意义
  • 3楼网友:爱难随人意
  • 2021-11-29 03:23
代码写规范一点 每个工具的原则不一样
i---i是 (i--)-i 还是 i-(--i) i--是先用后减 (i--)-i 即3-3=0 (运算结束后i的值是2了)
i-(--i) --i 是先减在用 即是2 3-2=1 (运算结束后i的值是2了)
你说是那个正确呢 我也不知道。。。2个都正确 但是。。。
  • 4楼网友:佘樂
  • 2021-11-29 03:16
有一本书有介绍好像叫C陷井,编译实现不一样,结果就不一样
TC:i---i= (i--)-i;
VC:i---i= i-(--i);

俱体可以对比一下生成的汇编代码
  • 5楼网友:等灯
  • 2021-11-29 02:03
执行i---i
不是i-(--i)
而是(i--)-i
这样就会先运算i--,但是这个是后缀运算所以要等到整个表达式运算完了才自减
所以其实还是再运算 3 - 3 = 0
然后算完了才会i = 2
你代码怎么写的啊?我试了一下是0啊。。。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯