真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

C語(yǔ)言中使用移位操作代替乘除運(yùn)算效率會(huì)更高嗎

本篇內(nèi)容介紹了“C語(yǔ)言中使用移位操作代替乘除運(yùn)算效率會(huì)更高嗎”的有關(guān)知識(shí),在實(shí)際案例的操作過(guò)程中,不少人都會(huì)遇到這樣的困境,接下來(lái)就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

十載的前進(jìn)網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開(kāi)發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。成都全網(wǎng)營(yíng)銷的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整前進(jìn)建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無(wú)論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“前進(jìn)網(wǎng)站設(shè)計(jì)”,“前進(jìn)網(wǎng)站推廣”以來(lái),每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

在C語(yǔ)言程序開(kāi)發(fā)中,一些移位操作似乎可以達(dá)到與乘除法操作一樣的效果。例如,4>>1 等于 2,此時(shí)右移一位相當(dāng)于除以  2。類似的,2<<1 等于 4,此時(shí)左移一位相當(dāng)于乘以 2。

因此,有些教材推薦使用移位操作代替乘除操作,稱可以為最終的C語(yǔ)言程序帶來(lái)效率上的提升,那么真的如此嗎?

移位代替乘除,C語(yǔ)言程序效率更高嗎?

得到答案最簡(jiǎn)單直接的方法是做實(shí)驗(yàn),下面是兩段關(guān)于哈希算法的C語(yǔ)言程序,請(qǐng)看:

unsigned int hash( char const* s ) {  unsigned h = 0;  while ( *s != '\0' ) {  h = 127 * h + (unsigned char)*s;  ++ s;  }  return h; }

讀者應(yīng)將注意力放在h = 127 * h + (unsigned  char)*s;一行,此時(shí)C語(yǔ)言代碼使用的是乘法操作。下面是另外一段C語(yǔ)言代碼,請(qǐng)看:

unsigned int hash( char const* s ) {  unsigned h = 0;  while ( *s != '\0' ) {  h = (h << 7) - h + (unsigned char)*s;  ++ s;  }  return h; }
C語(yǔ)言中使用移位操作代替乘除運(yùn)算效率會(huì)更高嗎

唯一的區(qū)別就是使用 h<<7 移位操作代替了 127 * h 乘法操作

與前面那段C語(yǔ)言代碼相比,唯一的區(qū)別就是使用 h<<7 移位操作代替了 127 * h  乘法操作。在我的機(jī)器上,我測(cè)試了這兩段C語(yǔ)言代碼的效率,結(jié)果是兩者差不多快,有時(shí) 127 * h 版本的C語(yǔ)言代碼更快!

解析

C語(yǔ)言程序中,使用移位操作代替乘除操作更快嗎?現(xiàn)在這個(gè)問(wèn)題我們已經(jīng)有答案了:并不如此。原因在于C語(yǔ)言編譯器一般都會(huì)優(yōu)化我們的代碼,它知道如何盡可能快地增加目標(biāo)處理器體系結(jié)構(gòu)的能力,也即盡量生成盡可能快的程序。

因此作為C語(yǔ)言程序員,我們應(yīng)該做的是明確告訴編譯器我們的意圖(即到底是 i * 2,還是  i<<1),讓它根據(jù)上下文決定如何產(chǎn)生更快的指令。

當(dāng)硬件不支持快速乘除法時(shí),編譯器會(huì)將乘除法轉(zhuǎn)換為移位和加法/減法的適當(dāng)組合。因?yàn)樗牢覀兊淖罱K目的,所以有時(shí)候顯示的寫(xiě)出移位代碼,倒不如直接告訴編譯器我們的目的,這樣才能得到盡可能快的C語(yǔ)言程序。

事實(shí)上,有時(shí)候簡(jiǎn)單的移位操作并不等同于乘除法,而且有些乘法并不能通過(guò)簡(jiǎn)單的移位實(shí)現(xiàn),例如:

-5 / 2 = -2 -5 >> 1 = -3 i*3 = (i<<1) + i i*10 = (i<<3) + (i<<1)

因此,使用移位操作代替乘除法操作可能會(huì)帶來(lái)預(yù)計(jì)之外的結(jié)果。而且有些移位組合也會(huì)讓同事難以理解這段C語(yǔ)言代碼的真實(shí)意圖,也不利于協(xié)作開(kāi)發(fā)和后期維護(hù)。

“C語(yǔ)言中使用移位操作代替乘除運(yùn)算效率會(huì)更高嗎”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!


本文名稱:C語(yǔ)言中使用移位操作代替乘除運(yùn)算效率會(huì)更高嗎
文章源于:http://weahome.cn/article/ihcogs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部