引用:http://www.xuebuyuan.com/521526.html
要求:如何用移位和加減實現除以3的操作,在此略微擴充一下,實現無符號整數除法,但是返回值也爲無符號整型。
利用魔數。代碼如下。
#include <iostream>
using namespace std;
int divide3(int a)
{
return ((__int64)a * 0xAAAAAAAB) >>33;
}
int main()
{
int in;
cin>>in;
cout<<divide3(in)<<endl;
return 0;
}
方法中的魔數的原理是爲了用乘法實現32位被除數的除法運算,編譯器會爲被除數乘上一個32位的倒數,就形成了一個64位的數,其中低32位是餘數,高32位爲我們需要的結果,以下是一些常用的魔數,例如0xAAAAAAAB就代表2/3,0xCCCCCCCD代表4/5等等,具體可以在網上搜索相關內容。利用魔數除以5的代碼如下。
#include <iostream>
using namespace std;
int divide5(int a)
{
return ((__int64)a * 0xCCCCCCCD) >>34;
}
int main()
{
int in;
cin>>in;
cout<<divide5(in)<<endl;
return 0;
}