課程
/后端開發
/C
/C語言入門
比如; int a = 3; b = 4;計算a+b%a-b/a+a*b-a++該算式的運算結果以及運算后a的值
2015-08-23
源自:C語言入門
正在回答
前面你說的“但假如是認為a++是先取值而后運算,而a本身并未受到這個運算的影響的話”——你可以這么理解,但你后半句“可以得出“c語言入門”3-4的答案是12”——正相反,恰恰無法得出這個結論。
a++表達式的值就是a當時的值,在當時a的值可以說是不受這個運算的影響的。但a的值最終還是要自增的,只不過這個自增是什么時候發生的是不確定的,那么整個表達式中前面那幾個a的值該取多少呢?不確定! 你無法確定前面那幾個a是不是已經自增過了,這是因為C標準沒有規定操作數的求值順序。表達式是有優先級的,但是優先運算的表達式的操作數不一定是優先求值,反之亦然。加之a自增的時點本來就不確定,所以無法確定這些a到底該是什么值,那整個表達式的值也就是不確定的了。
如我在那個帖子中最后的那個建議所說:如果有表達式改變了一個操作數的值,那就不要在這個復合表達式中再次使用這個操作數。除非你能確定“改變值”和“使用值”的先后順序。
擁抱藍天 提問者
首先說:這題目出錯了!
這道題與運算符優先級無關,這個表達式的值是不確定的。
根據優先級,最后的a++先算,a++的值為4,但是a本身的值是什么時候自增的?這是不確定的。所以式子中前面那些a的值也是不確定的。
對上面的解答有疑惑,請看這里?http://www.xianlaiwan.cn/qadetail/64864?我的回答,我懶得復制過來了...
onemoo 回復 擁抱藍天 提問者
擁抱藍天 提問者 回復 onemoo
從左到右,先乘除取模,后加減? 這一題結果是12? a運算后為4(運算時為3)
舉報
C語言入門視頻教程,帶你進入編程世界的必修課-C語言
3 回答運算符的運算的先后順序?
2 回答運算符的優先級順序呢求解
8 回答關于算術運算中先后順序的
3 回答算法的先后順序
1 回答算術運算符的優先順序
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2015-08-26
前面你說的“但假如是認為a++是先取值而后運算,而a本身并未受到這個運算的影響的話”——你可以這么理解,但你后半句“可以得出“c語言入門”3-4的答案是12”——正相反,恰恰無法得出這個結論。
a++表達式的值就是a當時的值,在當時a的值可以說是不受這個運算的影響的。但a的值最終還是要自增的,只不過這個自增是什么時候發生的是不確定的,那么整個表達式中前面那幾個a的值該取多少呢?不確定! 你無法確定前面那幾個a是不是已經自增過了,這是因為C標準沒有規定操作數的求值順序。表達式是有優先級的,但是優先運算的表達式的操作數不一定是優先求值,反之亦然。加之a自增的時點本來就不確定,所以無法確定這些a到底該是什么值,那整個表達式的值也就是不確定的了。
如我在那個帖子中最后的那個建議所說:如果有表達式改變了一個操作數的值,那就不要在這個復合表達式中再次使用這個操作數。除非你能確定“改變值”和“使用值”的先后順序。
2015-08-23
首先說:這題目出錯了!
這道題與運算符優先級無關,這個表達式的值是不確定的。
根據優先級,最后的a++先算,a++的值為4,但是a本身的值是什么時候自增的?這是不確定的。所以式子中前面那些a的值也是不確定的。
對上面的解答有疑惑,請看這里?http://www.xianlaiwan.cn/qadetail/64864?我的回答,我懶得復制過來了...
2015-08-23
從左到右,先乘除取模,后加減? 這一題結果是12? a運算后為4(運算時為3)