概述
测试移位和乘除的比较,发现移位比乘除运算快一个位数的速度,但是难点在于判断是否是2的幂次级的数,如果不是还得通过代码拆分到2的幂次+上分子的累和,然后通过移位得到2的次幂数这样;
下列代码只是简单的判断是幂级数则移位运算,不是则正常计算,不是完全都是移位算,(之后如果找到方法判断更快在更新)
C/C++:
1 #include <iostream> 2 3 4 5 uint64_t Multiply_Dived(uint64_t member, uint64_t denominator, char style) 6 { 7 //判断分母是否是2的次幂 8 if (denominator & (denominator - 1)) 9 { 10 if (style == '*') 11 { 12 while ((denominator >>= 1) != 1) 13 { 14 member <<= 1; 15 } 16 17 } else 18 { 19 while ((denominator >>= 1) != 1) 20 { 21 member >>= 1; 22 } 23 24 } 25 return member; 26 } 27 28 if (style == '*') 29 { 30 return member * denominator; 31 } else 32 { 33 return member / denominator; 34 } 35 } 36 37 uint64_t Nomorl(uint64_t member, uint64_t denominator, char style) 38 { 39 if (style == '*') 40 { 41 return member * denominator; 42 } else 43 { 44 return member / denominator; 45 } 46 } 47 48 49 int main() 50 { 51 std::clock_t start = 0, stop = 0; 52 start = clock(); 53 for (uint64_t i = 0; i < 100000000; i++) 54 { 55 Multiply_Dived(1, 100, '/'); 56 } 57 stop = clock(); 58 std::cout << "除移位运行时间: " << ((double) (stop - start) / CLOCKS_PER_SEC) << std::endl; 59 60 61 62 63 start = clock(); 64 for (uint64_t i = 0; i < 100000000; i++) 65 { 66 Nomorl(1, 100, '/'); 67 } 68 stop = clock(); 69 std::cout << "正常除运行时间: " << ((double) (stop - start) / CLOCKS_PER_SEC) << std::endl; 70 71 return 0; 72 }
转载于:https://www.cnblogs.com/xuaidongstdudyrecording/p/7103733.html
最后
以上就是搞怪魔镜为你收集整理的C/C++ 移位计算代替乘除运算的全部内容,希望文章能够帮你解决C/C++ 移位计算代替乘除运算所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复