久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2119|回復(fù): 13
打印 上一主題 下一主題
收起左側(cè)

關(guān)于C語言代碼精簡 原理知道,但是不知道怎么算?

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:510170 發(fā)表于 2022-3-20 16:10 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
有大神能精簡下下面的代碼嗎?謝謝了。原理知道。但是不知道怎么算。
number除以32,得出的商乘以0x0200,再加上0x1800就可以得到a_addr了
number除以32,得到的余數(shù)再乘以16,就可以得到a_addr了。但是
打印出來的數(shù)據(jù)不對。看看有大神幫忙看看錯在那里,應(yīng)該怎么寫才行。
我自己寫的,但是不對
number=51;                                                               
a_addr = (number / 32)*0x0200+0x1800 ;
b_addr = (number % 32)*16 ;
printf("開始地址=%bd  \n", a_addr);
printf("\r\n");
printf("內(nèi)存開始地址=%bd  \n", b_addr);
printf("\r\n");
下面是需要精簡的代碼

                if (0 = < number < 32) //如果是第1扇區(qū)
                {
                    a_addr = 0x1800;
                    b_addr = number * 16;
                }
                else if (32 = < number < 64) //如果是第2扇區(qū)
                {
                    a_addr = 0x1A00;
                    b_addr = (number * 16) - 0x0200;
                }
                else if (64 = < number < 96) //如果是第3扇區(qū)
                {
                    a_addr = 0x1C00;
                    b_addr = (number * 16) - 0x0400;
                }
                else if (96 = < number < 128) //如果是第4扇區(qū)
                {
                    a_addr = 0x1E00;
                    b_addr = (number * 16) - 0x0600;
                }
                else if (128 = < number < 160) //如果是第5扇區(qū)
                {
                    a_addr = 0x2000;
                    b_addr = (number * 16) - 0x0800;
                }






分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:883242 發(fā)表于 2022-3-20 17:35 | 只看該作者
你需要的是寫出正確的代碼,精簡那還是很久很久以后的要求了。

給你個提示:if (0 = < number < 32),括號里面的寫法錯的一塌糊涂。
回復(fù)

使用道具 舉報

板凳
ID:401564 發(fā)表于 2022-3-20 18:59 | 只看該作者
精減代碼的意義何在?讓英文字母減少嗎?
我在這論壇第一次看到這樣的代碼:if (0 = < number < 32),可能是我學(xué)的不太好吧,我不會用這種代碼的
有時候代碼多并不一定是壞事,就拿8051的中斷來說,IE=0x84遠遠沒有 EX1=1;EA=1;的直觀
回復(fù)

使用道具 舉報

地板
ID:510170 發(fā)表于 2022-3-20 20:06 | 只看該作者
Y_G_G 發(fā)表于 2022-3-20 18:59
精減代碼的意義何在?讓英文字母減少嗎?
我在這論壇第一次看到這樣的代碼:if (0 = < number < 32),可能是我 ...

這個沒有人教呀。都是自己摸索的。能跑就行了。我也就是個愛好者。
回復(fù)

使用道具 舉報

5#
ID:510170 發(fā)表于 2022-3-20 20:22 | 只看該作者
Hephaestus 發(fā)表于 2022-3-20 17:35
你需要的是寫出正確的代碼,精簡那還是很久很久以后的要求了。

給你個提示:if (0 = < number < 32),括 ...

那應(yīng)該怎么寫呢?麻煩指點下,謝謝了。
回復(fù)

使用道具 舉報

6#
ID:161164 發(fā)表于 2022-3-20 22:28 | 只看該作者
你知到嗎?
0x02 = 512可以被32整除的
512 / 32 = 16
所以a_addr = (number / 32)*0x0200+0x1800 ;
可以寫成:a_addr = number * 16 +0x1800 ;

而 if (0 = < number < 32)的正確寫法是
if((0 <= number) && (number < 32))當(dāng)中的"&&"是條件與運算
回復(fù)

使用道具 舉報

7#
ID:510170 發(fā)表于 2022-3-21 07:29 | 只看該作者
lkc8210 發(fā)表于 2022-3-20 22:28
你知到嗎?
0x02 = 512可以被32整除的
512 / 32 = 16

謝謝你,受教了。
回復(fù)

使用道具 舉報

8#
ID:844772 發(fā)表于 2022-3-21 08:51 | 只看該作者
f((0 <= number) || (number>160))
   //出錯處理;
  else
   {   a_addr = 0x1800+(int)(number/32)*0x200;
        b_addr = number * 16-( a_addr-0x1800;);
   }
      
回復(fù)

使用道具 舉報

9#
ID:827243 發(fā)表于 2022-3-21 09:38 | 只看該作者
二進制溫習(xí)一下吧
a_addr=(number>>5)*0x200+0x1800;
b_addr=(number & 32) * 16;

6樓的做法仔細考慮一下,應(yīng)該是有問題的。
a_addr應(yīng)該是頁地址,所以 number =1 時 a_addr 是 0x1800 而不是 0x1800+ 1* 16=0x1810

回復(fù)

使用道具 舉報

10#
ID:1006306 發(fā)表于 2022-3-21 11:29 | 只看該作者
a=number/32;
回復(fù)

使用道具 舉報

11#
ID:1006306 發(fā)表于 2022-3-21 11:40 | 只看該作者
a=number/32;          //計算倍數(shù)關(guān)系   0 = < number < 32------------a=0   32 = < number < 64)----------a=1 a_addr = (0x1800)+ (a*0x0200)//是不是 0x0200的倍數(shù),你自己算下哈 b_addr = (number * 16) - (a*0x0200);// /* a=0時; a_addr = (0x1800)+ 0; b_addr = (number * 16) - 0;// 相當(dāng)于 if (0 = < number < 32) //如果是第1扇區(qū)             {                     a_addr = 0x1800;                     b_addr = number * 16;                 } */
回復(fù)

使用道具 舉報

12#
ID:1006306 發(fā)表于 2022-3-21 11:41 | 只看該作者
a=number/32;          //計算倍數(shù)關(guān)系   0 = < number < 32------------a=0   32 = < number < 64)----------a=1 a_addr = (0x1800)+ (a*0x0200)//是不是 0x0200的倍數(shù),你自己算下哈 b_addr = (number * 16) - (a*0x0200);// /* a=1時; a_addr = (0x1800)+ 0x0200; b_addr = (number * 16) - 0x0200;// 相當(dāng)于        if (32 = < number < 64) //如果是第2扇區(qū)                 {                     a_addr = 0x1A00;                     b_addr = (number * 16) - 0x0200;                 } */
回復(fù)

使用道具 舉報

13#
ID:612392 發(fā)表于 2022-3-21 11:54 | 只看該作者
Y_G_G 發(fā)表于 2022-3-20 18:59
精減代碼的意義何在?讓英文字母減少嗎?
我在這論壇第一次看到這樣的代碼:if (0 = < number < 32),可能是我 ...

很多大廠考核代碼行數(shù)的,要求精簡,能寫一行的絕對不寫兩行。
同時呢,又有很多大廠考核代碼行數(shù)的,要求工作量,能寫兩行的絕對不寫一行。
回復(fù)

使用道具 舉報

14#
ID:491577 發(fā)表于 2022-3-21 17:57 | 只看該作者
你的變量要設(shè)置成長整形的,估計是數(shù)據(jù)溢出造成數(shù)據(jù)不對。化成分扇區(qū)模式是多余的,為了湊行數(shù)嗎?
回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

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

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

快速回復(fù) 返回頂部 返回列表
主站蜘蛛池模板: 欧美日韩亚洲国产综合 | 欧美xxxx性xxxxx高清 | 在线天堂免费中文字幕视频 | 精品亚洲一区二区三区 | 久久久999精品 | 涩涩导航| 成人在线精品视频 | 午夜国产羞羞视频免费网站 | 亚洲欧美自拍偷拍视频 | 欧美一级片 | 你懂的国产 | 国产成人精品在线播放 | 国产在线中文字幕 | 欧美色综合天天久久综合精品 | 999精品在线观看 | h肉视频 | 精品少妇一区二区三区日产乱码 | 欧美激情视频网站 | 亚洲欧美日韩中文在线 | 亚洲一区日韩 | 国产中文 | 国产高清精品一区二区三区 | 久久综合欧美 | 日韩三级| 久久精品91| 成人特级毛片 | 精品国产一区二区三区久久 | 国产精品成人一区二区三区吃奶 | 一区二区三区国产 | 日本精品视频一区二区 | www.久草| 91在线导航 | 精品国产一区二区三区性色av | 欧美一区二区三区在线 | 在线观看国产网站 | 欧美黑人一级爽快片淫片高清 | 黄色一级大片在线免费看产 | 黄色大片免费网站 | 国产精品久久久久9999鸭 | 天天操一操 | 欧美另类视频 |