找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 2228|回復(fù): 9
收起左側(cè)

C語(yǔ)言語(yǔ)句問(wèn)題 if(x<=y) 和if(x<y||x==y) 一樣嗎 執(zhí)行效率誰(shuí)快

[復(fù)制鏈接]
ID:709761 發(fā)表于 2022-9-8 17:01 | 顯示全部樓層 |閱讀模式
if(x<=y)  和if(x<y||x==y) 一樣嗎 執(zhí)行效率誰(shuí)快
回復(fù)

使用道具 舉報(bào)

ID:688692 發(fā)表于 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) 這個(gè)寫(xiě)法勝出。
回復(fù)

使用道具 舉報(bào)

ID:451718 發(fā)表于 2022-9-8 17:37 | 顯示全部樓層
C語(yǔ)言編譯的時(shí)候,會(huì)自己優(yōu)化的。  執(zhí)行效率,主要還是要看你的函數(shù)嵌套深度,以及for循環(huán)的使用頻率。
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-9-8 18:19 | 顯示全部樓層

換個(gè)優(yōu)化等級(jí)就不是這個(gè)結(jié)果了。
回復(fù)

使用道具 舉報(bào)

ID:999824 發(fā)表于 2022-9-8 19:33 | 顯示全部樓層
if(x<=y)這個(gè)更快,更好,老手都這樣用
回復(fù)

使用道具 舉報(bào)

ID:1007932 發(fā)表于 2022-9-8 21:35 | 顯示全部樓層
現(xiàn)在優(yōu)化后應(yīng)該是一樣的,不過(guò)編譯器不一樣結(jié)果也可能不一樣,要看匯編代碼
回復(fù)

使用道具 舉報(bào)

ID:332444 發(fā)表于 2022-9-10 10:05 | 顯示全部樓層
基本一樣,不要看匯編語(yǔ)句多寡比較,要實(shí)際循環(huán)計(jì)數(shù)時(shí)間比較才得出結(jié)論,比如a>b只執(zhí)行一次而a>=b則執(zhí)行2次,因此慎用有2次的運(yùn)算符,有時(shí)>=或<=可以化為>或<的運(yùn)算優(yōu)化。
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2022-9-10 14:10 來(lái)自觸屏版 | 顯示全部樓層
xianfajushi 發(fā)表于 2022-9-10 10:05
基本一樣,不要看匯編語(yǔ)句多寡比較,要實(shí)際循環(huán)計(jì)數(shù)時(shí)間比較才得出結(jié)論,比如a>b只執(zhí)行一次而a>=b則執(zhí)行2次 ...

a>b,就是b-a 是否借位,借位為真,不借位為假。
a>=b,就是a-b 是否借位,不借位為真,借位為假。兩者都是一次減法運(yùn)算,和一次借位標(biāo)志判斷。本質(zhì)上是一樣的執(zhí)行量,看編譯器的“聰明”程度了。
回復(fù)

使用道具 舉報(bào)

ID:434018 發(fā)表于 2022-9-10 20:30 | 顯示全部樓層
if(x<=y)快,看編譯匯編代碼
回復(fù)

使用道具 舉報(bào)

ID:883242 發(fā)表于 2022-9-11 03:42 | 顯示全部樓層
一事無(wú)成 發(fā)表于 2022-9-8 21:35
現(xiàn)在優(yōu)化后應(yīng)該是一樣的,不過(guò)編譯器不一樣結(jié)果也可能不一樣,要看匯編代碼

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

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

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表