整數除法還有這麼一手,學習!

引用: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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章