看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《lytesha ( <囧>)》之銘言: : 請問一下 由於在C中乘除法的速度會比較慢 : 如果 ex. i= j*7 ; : 改成 i= (j<<3)-j; : 這樣還會比要快嗎? 不一定 要看 compiler 做得怎樣 : 另外請問一下要如何盡量不用乘除法阿 : 我知道如果是2的次方 可用<< or >>來作 : 如果不是呢? 要怎麼辦? : 謝謝 x86 assembly 有一個叫 lea 的指令 原本的用途是幫你計算 indirect addressing 下的記憶體位址 (base + index * scale) 但因為其中有 index * scale 的部分 所以可以拿來計算常數乘法 不過我不會建議你用 assembly 做這種事 因為這是 compiler 的工作 事實上以你前面的例子 我用 gcc 試過的結果是寫 i=j*7 會比 i=(j<<3)-j 要快 2的次方我也不建議你用 << 取代星星 一來是 compiler 會幫你做 (如果你用的compiler做不到......扔掉它吧) 二來是用星星別人比較容易看懂 (code 是寫給人看的) 至於除法比較難 你可以去看 IA32 optimization reference 之類的文件 裡面有一脫拉庫的方法 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.62.3.35
UNARYvvv:用 LEA .. 妙計! 04/09 17:27