移位不過是技巧

2022-03-02 13:06:26 字數 648 閱讀 7764

使用移位

運算來避免乘法運算是一種常用技巧,不過乘數必須都是正整數,而且必須至少有乙個是

2 的 n 次方,例如:2,4,8,16,32……移位運算的特點是速度快,而乘法運算速度較慢,把乘法運算轉化為移位運算可以稍微提高程式執行效率。例如:

num *= 32;

等同於num <<= 5; /* 2 的 5 次方等於 32 */

如果乘數不是 2 的 n 次方,我們可以把乘數分解成幾個 2 的 n 次方的和:

num *= 20;

等於num *= (16 + 4);

等於num = num * 16 + num * 4;

等於num = (num << 4) + (num << 2);

不過,現在的編譯器很聰明,它們會代替我們做這種優化

。也就是說,如果我們寫的語句是:

num *= 100;

編譯器會把這個語句優化為:

num = (num << 6) + (num << 5) + (num << 2);

所以,我們沒有必要手工進行這種優化,因為編譯器會替我們完成。而且,就算進行了這種優化,速度也不會有太大提高。我們應該把精力用來改進演算法,乙個好的演算法可以讓程式執行效率大大提高!

本文版權歸螞蟻的 c/c++ 標準程式設計

以及

程式設計不過是文字遊戲

在我看來,程式設計只不過是個文字遊戲.因為你大部分的時間都在處理字串,就是把文字顛來倒去的組合,拆分,合併,判斷,過濾,等等 所以我總結了一下一些問題,覺得只要用你正在學的程式語言實現了,基本上這門程式語言你就入門了 為什麼我不提計算 或者叫運算 呢,因為現在的很多語言基本上都自帶了運算的函式庫,而...

保本基金 不過是噱頭 2008

保本 不過是噱頭 在很多人的觀念裡,保證本金安全對保本 來說是理所當然的,是應有之義。但實際上,由於該類產品設定的嚴格的保本條件,如持有期,該類產品保 本比例的不同,以及外界因素的變化等,保本產品並不一定能保本。保本或許只是乙個宣傳的賣點,或者是投資者自己的一種美好願望罷了。造成保本產品不保本的原因...

人類只不過是只進化的芻狗

心理現代化 2010 11 09 04 48 57 閱讀12739 字型大小 大 中小訂閱 心理現代化 第一部分 誰偷走了你的幸福?一 那些奴役你的心理 1.幸福在 科學啊告訴你 2.都是祖先惹的禍 上一節那個簡短得令人髮指 因此也疏漏得天地不容 的回答,大概沒能解答你心中的關於幸福的疑惑,反而讓你...