Re: [問題] bit_operation除非2的冪次方
※ 引述《kdok123 (小天)》之銘言:
: 標題: [問題] bit_operation除非2的冪次方
: 時間: Sun Nov 2 18:13:44 2014
:
: ex: 除3
:
: 如何用bit operation實現呢?
:
: 我想了半天沒有想出來...
:
: 希望各位可以指點我一下
:
: 謝謝
:
: --
: ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.112.25.105
: ※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1414923227.A.9BC.html
: 推 LPH66: 沒有, 不過倒是有反乘的做法 (雖然這會依賴 overflow 結果) 11/02 18:16
: → LPH66: 所以你就乖乖寫 /3 就好, 剩下的編譯器會幫你做 11/02 18:17
編譯器作法大體是這樣搞:
X/3 = (X*(a/3) )*(1/a)
a = 2的n次方,所以 1/a 只要變成右平移n位即可
( n的值依編譯器不同 微軟是31到33)
而 a/3 編譯器可以先算好 變成一個常數
簡單講 把乘法變成一個平移再一個乘法
那為何編譯器會想避乘法
這樣想一下 國小學的直式計算:
直式乘法 是可以一人做一位再加總的
而直式除法 似乎很難想到分開幹的辦法
這就是為何 要避開除法的原因
因為除法不能靠人(加法器)多好辦事加速
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.249.89.36
※ 文章網址: http://www.ptt.cc/bbs/C_and_CPP/M.1414951605.A.3D8.html
推
11/03 13:42, , 1F
11/03 13:42, 1F
→
11/03 13:43, , 2F
11/03 13:43, 2F
→
11/03 13:51, , 3F
11/03 13:51, 3F
→
11/03 19:20, , 4F
11/03 19:20, 4F
推
11/03 20:15, , 5F
11/03 20:15, 5F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):