新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 牛人業(yè)話 > 嵌入式C語言里的土豪們之除法與移位

        嵌入式C語言里的土豪們之除法與移位

        作者:jobs 時(shí)間:2013-10-22 來源:電子產(chǎn)品世界 收藏

          這個(gè)詞用在接下來要出場的再合適不過了。他們在里占盡了奢華,但是畢竟我們更需要一個(gè)節(jié)約型的微生態(tài)環(huán)境。在這里簡單給大家分析一下編程時(shí)用到的

        本文引用地址:http://www.104case.com/article/182359.htm

          

          微處理器里可算是一個(gè)消耗大戶,復(fù)雜的實(shí)現(xiàn)方式不僅占用了大師寶貴的計(jì)算時(shí)間而且精度有限情況下占用了大片的RAM。因此,常常在各類文章里看到,編程人員應(yīng)該使用右移運(yùn)算來代替除法。這個(gè)右移方法沒有問題,也確實(shí)能提高微處理器的計(jì)算能力,節(jié)省處理時(shí)間。但是,我們必須要注意到,這種方式只適用于整數(shù)運(yùn)算的2的倍數(shù)的除法,即除以2、4、8、16等數(shù)值。“盡量使用右移來替代除法”這個(gè)說法,我是不贊成的。主要因?yàn)槟壳暗木幊汰h(huán)境都可以優(yōu)化,像這種以2的倍數(shù)的除法,編譯器如果認(rèn)為運(yùn)算要好于除法,那么其就會自覺地編譯成為運(yùn)算,而無須用戶干預(yù)。

          這里我們再假設(shè)一種情況:我們在進(jìn)行一次數(shù)據(jù)采集處理,每組數(shù)據(jù)共16個(gè),然后我們通過迭代的方式將這16個(gè)數(shù)據(jù)求和,然后,再右移4位(除以16)。可是,也許這里就為我們?nèi)蘸蟮母鲁绦蚵褚幌铝藗€(gè)重大隱患。恰巧我們求和的迭代次數(shù)是通過一個(gè)#define來定義的,而某次采集我們不需要16個(gè)數(shù)據(jù),而是15個(gè),我們將其更新為15。這樣,我們就不得不再重新設(shè)計(jì)、編寫我們的程序——將無聊的移位全部換成除法。當(dāng)然,如果我們沒有意識到這次求平均的除數(shù)是移位4次的問題,那么,15個(gè)數(shù)據(jù)將仍然被除以16以求平均,結(jié)果可想而知。

          用移位操作時(shí)用移位,用除法是就是除法

          軟件的各種bug,有些是來自原作者,而更多的是來自那些對程序的更新、維護(hù)、移植時(shí)所造成的。因此,軟件代碼的應(yīng)該有較強(qiáng)的可讀性與良好的可移植性。除非是那些特殊的函數(shù)與結(jié)構(gòu)自己來搞定,大部分的優(yōu)化還是交給編譯器去做吧!

         

        linux操作系統(tǒng)文章專題:linux操作系統(tǒng)詳解(linux不再難懂)

        c語言相關(guān)文章:c語言教程




        關(guān)鍵詞: 嵌入式 C語言 土豪 除法 移位

        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 和林格尔县| 丹江口市| 武城县| 玉溪市| 富顺县| 东乌珠穆沁旗| 北宁市| 沾化县| 永州市| 峨眉山市| 慈利县| 安新县| 绩溪县| 松阳县| 北票市| 二连浩特市| 通化市| 图木舒克市| 南汇区| 南投县| 合江县| 京山县| 阿鲁科尔沁旗| 收藏| 曲松县| 安达市| 仁怀市| 微博| 桑植县| 吴堡县| 射阳县| 龙门县| 区。| 大宁县| 安义县| 竹山县| 恩施市| 宜章县| 金堂县| 安化县| 黎川县|