整数除法还有这么一手,学习!

来源:互联网 发布:matlab 初始化零矩阵 编辑:程序博客网 时间:2024/06/10 05:55

引用: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;}
0 0
原创粉丝点击