测试移位和乘除的比较,发现移位比乘除运算快一个位数的速度,但是难点在于判断是否是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++ 移位计算代替乘除运算相关推荐

  1. 简单计算器 (实数计算 先乘除后加减)

    模拟简单运算器的工作.实现加减乘除计算表达式输出正确结果(保留 2 位小数). 输入格式: 输入在一行中给出一个四则运算算式,没有空格,且至少有一个操作数.遇等号"="说明输入结束 ...

  2. 灵魂拷问:用移位来代替除法运算真的效率高吗?Java 编译器到底有没有做除法优化?

    目录 引入 C++ 编译器对除法的优化 Java 编译器对除法的优化 移位运算对应的字节码 除法操作对应的字节码 查看及分析 JIT 即时编译结果 1.手动编译 OpenJDK 2.编译 hsdis- ...

  3. 2---理解正余弦、复数求模、反正切和乘除运算的CORDIC算法实现

    CORDIC(Coordinate Rotation Digital Computer)算法是J.Volder在1956在航空控制系统设计中构思的,但其实相似的算法在更早的1624年就已经被Henry ...

  4. 用yacc编写的算术运算计算器_如何用纯机械实现乘除运算,这是个问题

    在步进计算器诞生之后的两百多年中,机械计算之曲始终在莱布尼茨定好的基调上演奏.不难发现,两百年中的制造工艺在不断进步,机器的可靠性也不断提高,而计算原理却始终没有改进.尽管各路"莱系&quo ...

  5. html输入公式得到混合运算结果,excel表格如何用公式计算加减乘除混合运算-excel乘法如何计算,excel函数怎么计算乘法...

    Excel支持数学中的四则运算,直接在目标单元格写相应的公式即可.例百如求A1减B1的差,在C1单元格可输入:=A1-B1 需注意: Excel里面任何公式(包括数学四则运算)都是需要以等号度开头. ...

  6. 3D Cube计算引擎加速运算

    3D Cube计算引擎加速运算 华为达芬奇架构的AI芯片Ascend910,同时与之配套的新一代AI开源计算框架MindSpore. 为什么要做达芬奇架构? AI将作为一项通用技术极大地提高生产力,改 ...

  7. C语言编程学习:写的秒速计算四则混合运算项目

    C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...

  8. java位移运算真的比乘除运算快吗?

    刚学了位移运算,发现乘除在乘数或除数是2的几次幂数时可以用位移运算替换,并且网上都说位移运算效率高时,好奇究竟快多少便做了如下测试: public static void main(String[] ...

  9. 汇编语言-010(循环移位ROL,ROR 、进位循环进位RCL,RCR 、有符号数溢出 、双精度移位SHLD,SHRD、SHL和ADD计算 、位运算应用)

    1 :循环移位ROL,ROR,带进位循环进位RCL,RCR .386 .model flat,stdcall.stack 4096 ExitProcess PROTO,dwExitCode:DWORD ...

最新文章

  1. python gui编程框架添加工具栏_python gui编程,我是初学者。用tk,制作下拉菜单的command不分我想打开另一个界面。如和解决,求解!!...
  2. 如何在实际中计划和执行一个机器学习和深度学习项目
  3. 【0521模拟赛】小Z爱数学
  4. BabyXor flower逆向寒假生涯(19/100)
  5. mybatis配置文件不在resources目录下时需进行的额外配置方法
  6. python 三引号_Python 基础(一):入门必备知识
  7. 计算机网络英文题库,强烈推荐计算机网络英文试题库(附答案)chapter.doc
  8. 针对ArcGIS Server 跨域问题的解释
  9. ArchLinux(2013)中的网络配置和静态IP时DNS刷新的解决方法
  10. 《程序设计技术基础》第1-5章例程
  11. paip.提升用户体验---显示密码控件ShowPwdController
  12. c语言弹窗代码,pc端点击弹窗代码
  13. 2020.07.01-07.15学习小结
  14. 书摘---创业36条军规2:创业的三大条件
  15. Android性能优化(一):APP启动优化
  16. uva 10859 放置街灯--Placing Lampposts
  17. 简单阅读golang的net/http包和Negroni的源码
  18. [软件分享]Bandizip(有史以来最好的压缩软件)「v1.0」
  19. 如何从0开始撰写一篇CS论文?(内附写作流程图)
  20. 什么是环回接口(Loopback Interface、环回地址)

热门文章

  1. Get,Post请求中文乱码问题有效解决方法
  2. 测试基础 – 软件测试计划
  3. tomcat war包自动化部署脚本
  4. 办公电脑变买为租,“企业惊变”背后神秘推手
  5. apache vhost
  6. android错误整理——模拟器无法连接网络
  7. 如何对.NET远程处理框架相关知识简介
  8. Stuts的Web.xml 详解
  9. WCF 4.0 进阶系列 – 第十二章 实现单向操作和异步操作(中)
  10. 大数据可视化及发展趋势