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

QQ登錄

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

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

這串C語(yǔ)言代碼能不能在優(yōu)化一下?

[復(fù)制鏈接]
ID:278457 發(fā)表于 2024-10-4 02:39 | 顯示全部樓層 |閱讀模式
謝謝大蝦
1.png
回復(fù)

使用道具 舉報(bào)

ID:1109793 發(fā)表于 2024-10-4 14:26 | 顯示全部樓層
BCD碼放數(shù)組里面,然后弄個(gè)函數(shù),把數(shù)組地址和數(shù)據(jù)傳進(jìn)去,里面用一個(gè)循環(huán)搞定,這樣應(yīng)該簡(jiǎn)化不少吧。
大概類(lèi)似這種代碼編譯器好像也可以幫你簡(jiǎn)化。就是實(shí)際上出來(lái)的HEX并不大。
回復(fù)

使用道具 舉報(bào)

ID:278457 發(fā)表于 2024-10-5 01:59 | 顯示全部樓層
xiaobendan001 發(fā)表于 2024-10-4 14:26
BCD碼放數(shù)組里面,然后弄個(gè)函數(shù),把數(shù)組地址和數(shù)據(jù)傳進(jìn)去,里面用一個(gè)循環(huán)搞定,這樣應(yīng)該簡(jiǎn)化不少吧。
大 ...

最好還是用語(yǔ)法搞定
回復(fù)

使用道具 舉報(bào)

ID:579397 發(fā)表于 2024-10-5 03:46 | 顯示全部樓層
本帖最后由 405616736 于 2024-10-5 23:30 編輯

int str[4]
        
if(aa==20)
        {
                aa=0;
                if(++temp==9999) temp=0;
                sprintf(str,"%04d",temp);        }


回復(fù)

使用道具 舉報(bào)

ID:1109793 發(fā)表于 2024-10-5 07:52 | 顯示全部樓層
405616736 發(fā)表于 2024-10-5 03:46
int str[4]
       
if(aa==20)

你這看起來(lái)簡(jiǎn)化了,編譯出來(lái)可不一定吧
回復(fù)

使用道具 舉報(bào)

ID:592807 發(fā)表于 2024-10-5 08:08 | 顯示全部樓層
405616736 發(fā)表于 2024-10-5 03:46
int str[4]
       
if(aa==20)

將if判斷語(yǔ)句那里換成==就是正解。
回復(fù)

使用道具 舉報(bào)

ID:1109793 發(fā)表于 2024-10-5 09:12 | 顯示全部樓層
405616736 發(fā)表于 2024-10-5 03:46
int str[4]
       
if(aa==20)

而且你這個(gè)sprintf輸出的字符,不是BCD碼吧。這樣要是顯示到比如數(shù)碼管上面還得再處理一下吧。
回復(fù)

使用道具 舉報(bào)

ID:579397 發(fā)表于 2024-10-5 14:41 | 顯示全部樓層
黃youhui 發(fā)表于 2024-10-5 08:08
將if判斷語(yǔ)句那里換成==就是正解。

手快寫(xiě)漏了
回復(fù)

使用道具 舉報(bào)

ID:624769 發(fā)表于 2024-10-5 23:28 | 顯示全部樓層
你要優(yōu)化什么?
優(yōu)化 C 語(yǔ)句看上去的簡(jiǎn)潔程度?
還是代碼執(zhí)行效率?
變量的占用量?
還是排版上毫無(wú)意義的一大堆括號(hào)?
回復(fù)

使用道具 舉報(bào)

ID:278457 發(fā)表于 2024-10-6 04:57 | 顯示全部樓層
xiaobendan001 發(fā)表于 2024-10-5 07:52
你這看起來(lái)簡(jiǎn)化了,編譯出來(lái)可不一定吧

我的意思是IF能不能同時(shí)判斷AA,BB。這樣代碼量就會(huì)很少
回復(fù)

使用道具 舉報(bào)

ID:278457 發(fā)表于 2024-10-6 04:59 | 顯示全部樓層
188610329 發(fā)表于 2024-10-5 23:28
你要優(yōu)化什么?
優(yōu)化 C 語(yǔ)句看上去的簡(jiǎn)潔程度?
還是代碼執(zhí)行效率?

我要C語(yǔ)句,簡(jiǎn)潔程度。
回復(fù)

使用道具 舉報(bào)

ID:879348 發(fā)表于 2024-10-6 10:25 | 顯示全部樓層
千百十個(gè)的運(yùn)算做成一個(gè)函數(shù),程序看上去會(huì)簡(jiǎn)潔點(diǎn)
回復(fù)

使用道具 舉報(bào)

ID:1109793 發(fā)表于 2024-10-6 13:27 | 顯示全部樓層
shenqiwei 發(fā)表于 2024-10-6 04:57
我的意思是IF能不能同時(shí)判斷AA,BB。這樣代碼量就會(huì)很少

不懂同時(shí)怎樣判斷。把BCD那部分弄個(gè)函數(shù),就很簡(jiǎn)潔了。

  1. uchar bcd[4],bcd2[4];
  2. void ibtd(uint i,uchar* mem){ //取余法獲得BCD碼
  3. uchar j;
  4. for(j=2;j<255;j--){                          
  5.         mem[j]=i%10;
  6.     i=i/10;
  7.     }   
  8. }
復(fù)制代碼
回復(fù)

使用道具 舉報(bào)

ID:401564 發(fā)表于 2024-10-7 10:52 | 顯示全部樓層
循環(huán)用取模表達(dá)式,代碼字母不可能不會(huì)少,但行數(shù)變少了
temp = (temp + 1) % 10000;
變量aa和bb如果是循環(huán)變化,同樣也可以用取模
回復(fù)

使用道具 舉報(bào)

ID:1134818 發(fā)表于 2024-10-27 19:37 | 顯示全部樓層
1.去掉只有一句的if的括號(hào)
2.去掉沒(méi)有用的if,比如12行、17行兩對(duì)
3.把a(bǔ)a和bb寫(xiě)成a[0]和a[1],其他對(duì)應(yīng)也寫(xiě)成數(shù)組,用個(gè)for
4.4個(gè)位也可以用數(shù)組+for
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

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

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

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