Re: [問題] bit_operation除非2的冪次方

看板C_and_CPP作者 (啃)時間9年前 (2014/11/03 02:06), 編輯推噓2(203)
留言5則, 4人參與, 最新討論串2/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:43, , 2F
補充一下,編譯器大概是這樣作的 XD
11/03 13:43, 2F

11/03 13:51, , 3F
CPU指令去算除法沒有比較快嗎
11/03 13:51, 3F

11/03 19:20, , 4F
有硬體optimization幫手 絕對比較快
11/03 19:20, 4F

11/03 20:15, , 5F
11/03 20:15, 5F
文章代碼(AID): #1KLdArFO (C_and_CPP)
文章代碼(AID): #1KLdArFO (C_and_CPP)