欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標題: C語言語句問題 if(x<=y) 和if(x<y||x==y) 一樣嗎 執行效率誰快 [打印本頁]

作者: 李冬    時間: 2022-9-8 17:01
標題: C語言語句問題 if(x<=y) 和if(x<y||x==y) 一樣嗎 執行效率誰快
if(x<=y)  和if(x<y||x==y) 一樣嗎 執行效率誰快

作者: cnos    時間: 2022-9-8 17:28
     4: if(x<=y)
C:0x000F    E508     MOV      A,0x08
C:0x0011    D3       SETB     C
C:0x0012    9509     SUBB     A,0x09
C:0x0014    5003     JNC      C:0019
     5: {
     6:         z=1;
C:0x0016    750A01   MOV      0x0A,#0x01
     7: }        


     8: if(x<y||x==y)
C:0x0003    E508     MOV      A,0x08
C:0x0005    C3       CLR      C
C:0x0006    9509     SUBB     A,0x09
C:0x0008    4005     JC       C:000F
C:0x000A    E508     MOV      A,0x08
C:0x000C    B50903   CJNE     A,0x09,C:0012
     9: {
    10:         z=1;
C:0x000F    750A01   MOV      0x0A,#0x01
    11: }


顯然,if(x<=y) 這個寫法勝出。
作者: robinsonlin    時間: 2022-9-8 17:37
C語言編譯的時候,會自己優化的。  執行效率,主要還是要看你的函數嵌套深度,以及for循環的使用頻率。
作者: Hephaestus    時間: 2022-9-8 18:19
cnos 發表于 2022-9-8 17:28
4: if(x

換個優化等級就不是這個結果了。
作者: XCYYLX    時間: 2022-9-8 19:33
if(x<=y)這個更快,更好,老手都這樣用
作者: 一事無成    時間: 2022-9-8 21:35
現在優化后應該是一樣的,不過編譯器不一樣結果也可能不一樣,要看匯編代碼
作者: xianfajushi    時間: 2022-9-10 10:05
基本一樣,不要看匯編語句多寡比較,要實際循環計數時間比較才得出結論,比如a>b只執行一次而a>=b則執行2次,因此慎用有2次的運算符,有時>=或<=可以化為>或<的運算優化。
作者: 188610329    時間: 2022-9-10 14:10
xianfajushi 發表于 2022-9-10 10:05
基本一樣,不要看匯編語句多寡比較,要實際循環計數時間比較才得出結論,比如a>b只執行一次而a>=b則執行2次 ...

a>b,就是b-a 是否借位,借位為真,不借位為假。
a>=b,就是a-b 是否借位,不借位為真,借位為假。兩者都是一次減法運算,和一次借位標志判斷。本質上是一樣的執行量,看編譯器的“聰明”程度了。
作者: frank_tw    時間: 2022-9-10 20:30
if(x<=y)快,看編譯匯編代碼
作者: Hephaestus    時間: 2022-9-11 03:42
一事無成 發表于 2022-9-8 21:35
現在優化后應該是一樣的,不過編譯器不一樣結果也可能不一樣,要看匯編代碼

然而我用RVMDK自帶的v5、v6兩種編譯器,以及IAR EWARM 8.22一共三種編譯器,測試了所有的優化等級,其輸出的ARM匯編代碼均與沙發的51代碼類似, if(x<=y) 只做了做了一次比較,而if(x<y||x==y)忠實的做了兩次比較。

顯然編譯器認為 if(x<=y) 和if(x<y||x==y) 是兩種完全不同的邏輯,不能在優化中合并第二種,具體的邏輯思路我也是百撕不得騎姐,大家可以暢所欲言的討論下。




歡迎光臨 (http://m.raoushi.com/bbs/) Powered by Discuz! X3.1