亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: int i = 2; i = (i++%3); 執(zhí)行后,為什么i的值為3 [打印本頁]

作者: sinuos    時間: 2015-04-22 23:48
標(biāo)題: int i = 2; i = (i++%3); 執(zhí)行后,為什么i的值為3
int i = 2; i = (i++%3);
執(zhí)行后,為什么i的值為3
作者: windoze    時間: 2015-04-23 00:56
不光是i變成了3,而且因?yàn)槟闩芰诉@個程序,導(dǎo)致月亮偏離了軌道,從此地球上潮汐改變氣候異常,本來一百年內(nèi)的超級地震現(xiàn)在變成99年了,你還不知道錯?
趕快把你的程序刪了把教你寫這種程序的書燒了,要不然這事傳出去被環(huán)保激進(jìn)分子知道了讓你分分鐘掛路燈。
作者: fender0107401    時間: 2015-04-23 08:27
莫非lz看的是嘆號強(qiáng)的書?
作者: hellioncu    時間: 2015-04-23 09:01
對i有兩個修改動作,次序不定,結(jié)果未定義
作者: sinuos    時間: 2015-04-23 09:32
謝謝回復(fù) 4# hellioncu


   
作者: zsszss0000    時間: 2015-04-23 09:47
@windoze這么寫,存在什么問題嗎?
我的理解應(yīng)該是先比較++和%的優(yōu)先級吧,應(yīng)該是先算%所以i=2
i++之后是3

不過,C/C++運(yùn)算符的優(yōu)先級和結(jié)合性,老是弄不清楚,容易出問題,還是多用()比較好!
作者: hanxin83    時間: 2015-04-23 09:56
寫這樣的代碼的人就該被TJJTDS...
作者: MeRcy_PM    時間: 2015-04-23 10:03
回復(fù) 6# zsszss0000
未定義吧,跟優(yōu)先級沒啥關(guān)系。


   
作者: zsszss0000    時間: 2015-04-23 10:07
  1. 警告: ‘i’上的運(yùn)算結(jié)果可能是未定義的 [-Wsequence-point]
復(fù)制代碼
編譯告警上的消息,提示這個地方存在未定義的行為, 這個優(yōu)先級,結(jié)合性的什么的,到現(xiàn)在為止一直沒有搞清楚回復(fù) 8# MeRcy_PM


   
作者: littledick    時間: 2015-04-23 10:21
按照我10多年前課堂上老師教的分解成這樣。
  1. int i = 2;
  2. int j = i++;
  3. int k = j % 3;
  4. k = k++;
  5. i = k;
復(fù)制代碼

作者: MeRcy_PM    時間: 2015-04-23 10:22
回復(fù) 9# zsszss0000
可以搜一下序列點(diǎn)。這是之前在知乎上一個問題看來的
“如果沒有特別指出,操作符的各個操作數(shù)的求值順序是未定的(unsequenced)。如果某個副作用與同一對象的其它副作用相關(guān),或者使用同一對象求值,就是未定義行為!
不能發(fā)url真憂傷。

   
作者: windoze    時間: 2015-04-23 11:54
回復(fù) 6# zsszss0000

優(yōu)先級!=求值順序
優(yōu)先級!=求值順序
優(yōu)先級!=求值順序

重要的事情要重復(fù)三遍
作者: shang2010    時間: 2015-04-23 21:49
看編譯器怎么理解了,各位先回家睡覺

明天寫個測試,接口完善后晚上繼續(xù)加班
作者: CUTianrui007    時間: 2015-04-28 10:48
我覺得分析++和--的執(zhí)行順序一點(diǎn)意義也沒有。何必要去記憶那些煩人的運(yùn)算規(guī)則呢?我從來只用括號來保證優(yōu)先級的。
另外,++和--的實(shí)現(xiàn)方式完全和編譯器的規(guī)則有關(guān),所以可以說,這不是語法層面的,而是編譯器層次的。要深入到編譯器
內(nèi)部才能理解這個問題。
作者: windoze    時間: 2015-04-28 11:49
回復(fù) 15# CUTianrui007

這和括號沒關(guān)系,加了括號還是錯的。
作者: idi0t    時間: 2015-04-28 17:09
回復(fù) 16# windoze


   估計(jì)很多人是這樣的:
   掃一眼, 這么短的表達(dá)式,一定很簡單.
   再一看等號右邊,想當(dāng)然的一定是在討論類似a=b++;類似這種常見的問題.(左邊一個i,有啥好看的);
   于是發(fā)表了評論.
作者: CUTianrui007    時間: 2015-04-28 18:54
原因是這樣的,int i = 2; i = (i++%3); i++是先執(zhí)行i的動作,也就是分解動作是這樣的:
i=(i%3);然后i就等于3了,然后i=3.這時就給i賦給了新值,這個新值是i++后的新值。
所以,自然i就等于3了。
也就是說,無論i=(i++%3),這里做是什么操作,最終結(jié)果永遠(yuǎn)是i++。

我估計(jì),你在不同的編譯器上試驗(yàn),一定會得到不同的結(jié)果的。
實(shí)現(xiàn)方式和具體的編譯器有關(guān)。
作者: CUTianrui007    時間: 2015-04-28 18:57
強(qiáng)烈建議看匯編代碼,一目了然。
作者: lin5161678    時間: 2015-04-29 09:26
回復(fù) 19# CUTianrui007

優(yōu)先級!=求值順序

看得懂嗎
唉 不要被匯編誤導(dǎo) 去搜索一下 未定義行為

PS 不搜索也行 但是拜托你別隨便發(fā)言誤導(dǎo)新人

   
作者: ayh423    時間: 2015-05-03 21:12
也就是c c++ 才有此 煩惱的問題
   basic  delphi 才不會出現(xiàn)呢
   代碼簡潔的縮成一行也有他自身的弊病。
作者: zengit    時間: 2015-05-04 15:25
回復(fù) 12# windoze


   




歡迎光臨 Chinaunix (http://www.72891.cn/) Powered by Discuz! X3.2