[問題] 用 "++" 來遞增的基本問題
小弟剛接觸C++不久
今天看到一支程式
例如
int i=5,j=0;
j=++i*++i*++i
cout<<j
我本來是這樣算的
j=6*7*8 =336
卻發現j執行出來的結果是 392
於是我百思不解 把運算那行改為
j=++i
執行出來是 6 這我知道
----------------------
然後把運算式改為
j=++i*++i
執行出來卻是49 我原本以為是 6*7=42
後來想想 電腦把 兩邊的i先做++ 在相乘
j= ++i * ++i
(原本i=5 ^i=6 ^i=7 )
此時i值變為7 7*7=49 這個解出來了
----------
後來我把運算式改為
j=++i*++i*++i
照我上面的說法應該 i=8
8*8*8=512 (正解為392)
我就困頓了
後來我用計算機算 7*7*8=392
然後我把運算式改為
j=++i*++i*++i*++i
跑出來的卻是 7*7*8*9 的答案 3528
-------------------------
此時有點頭緒
++i*++i
我想法是 電腦是先對 "第一個乘法式" 的兩個值做++處理
︾ i=7
j= ++i*++i *++i*++i
( ^^^^^^^ =49 )
然後電腦一次只做一次乘法
j= 49 * ++i *++i
^7變8
然後 ︾ 8變9
j= 49 * 8 *++i => j= 392 * ++i
^做完了 ^接著對它做
變得很像
j= {[(++i*++i)*++i]*++i}
電腦只對一個刮弧內的兩個值有++的優先反應
------(以上不知道大家看不看得懂)------------
不知道電腦是不是這樣子跑呢? 這是我剛剛騎車想出來的
有請強大的版友解惑 m川@.川m
--
為什麼您要這麼著急呢?
http://www.wretch.cc/blog/s9021413
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 61.229.222.5
推
06/05 19:51, , 1F
06/05 19:51, 1F
謝謝littleshan大的提醒,我現在知道這是錯誤的寫法了,
可是這是我哥以前他們的印度老師出的範例,是不是老師出題明顯有誤呢....
※ 編輯: tcc740sd 來自: 61.229.222.5 (06/05 20:06)
推
06/05 20:05, , 2F
06/05 20:05, 2F
推
06/05 20:26, , 3F
06/05 20:26, 3F
→
06/05 20:28, , 4F
06/05 20:28, 4F
推
06/05 20:36, , 5F
06/05 20:36, 5F
→
06/05 20:39, , 6F
06/05 20:39, 6F
推
06/05 20:40, , 7F
06/05 20:40, 7F
推
06/05 20:46, , 8F
06/05 20:46, 8F
印度人不是聽說程式語言超強的嗎....(聽說跟他們小時候教育有關)
剛小弟看到一題傻眼了 完全不知道電腦跑的順序
int x=8;
x-=--x - x--;
cout<<x;
很明顯的是錯誤題型 , 可是我好想知道電腦怎麼跑的 (強烈的求知慾)
這題 x = 6
※ 編輯: tcc740sd 來自: 61.229.222.5 (06/05 21:01)
推
06/05 21:03, , 9F
06/05 21:03, 9F
→
06/05 21:21, , 10F
06/05 21:21, 10F
推
06/05 21:22, , 11F
06/05 21:22, 11F
→
06/05 21:22, , 12F
06/05 21:22, 12F
→
06/05 21:23, , 13F
06/05 21:23, 13F
→
06/05 21:24, , 14F
06/05 21:24, 14F
→
06/05 22:29, , 15F
06/05 22:29, 15F
→
06/05 22:29, , 16F
06/05 22:29, 16F
→
06/05 22:48, , 17F
06/05 22:48, 17F
推
06/05 22:56, , 18F
06/05 22:56, 18F
推
06/05 23:07, , 19F
06/05 23:07, 19F
推
06/05 23:51, , 20F
06/05 23:51, 20F
→
06/05 23:52, , 21F
06/05 23:52, 21F
推
06/05 23:54, , 22F
06/05 23:54, 22F
推
06/07 02:41, , 23F
06/07 02:41, 23F
→
06/07 16:36, , 24F
06/07 16:36, 24F
→
06/07 16:36, , 25F
06/07 16:36, 25F
推
06/09 02:10, , 26F
06/09 02:10, 26F
→
06/09 02:10, , 27F
06/09 02:10, 27F