转贴C/C++用移位实现乘除法运算,提高运行效率

news/2024/7/8 2:47:03
用移位实现乘除法运算
  a=a*4;
  b=b/4;
  可以改为:
  a=a<<2;
  b=b>>2;
   说明:
  除2 = 右移1位 乘2 = 左移1位
  除4 = 右移2位 乘4 = 左移2位
  除8 = 右移3位 乘8 = 左移3位
  ... ...
  通常如果需要乘以或除以2的n次方 都可以用移位的方法代替。
  大部分的C编译器,用移位的方法得到代码比调用乘除法子程序生成的代码效率高。
  实际上,只要是乘以或除以一个整数,均可以用移位的方法得到结果,如:
  a=a*9
  分析a*9可以拆分成a*(8+1)即a*8+a*1, 因此可以改为: a=(a<<3)+a
  a=a*7
  分析a*7可以拆分成a*(8-1)即a*8-a*1, 因此可以改为: a=(a<<3)-a
  关于除法读者可以类推, 此略.

http://www.niftyadmin.cn/n/3711226.html

相关文章

Open CV系列学习笔记(七)边缘保留滤波(EPF) 2021-02-01

Open CV系列学习笔记&#xff08;七&#xff09;边缘保留滤波(EPF) 高斯双边 双边滤波&#xff08;Bilateral filter&#xff09;是一种非线性的滤波方法&#xff0c;是结合图像的空间邻近度和像素值相似度的一种折中处理&#xff0c;同时考虑空域信息和灰度相似性&#xff0c…

c++位运算,|,~,^,,

关键字&#xff1a;c位运算 什么是位(bit)&#xff1f; 很简单&#xff0c;位(bit)就是单个的0或1&#xff0c;位是我们在计算机上所作一切的基础。计算机上的所有数据都是用位来存储的。一个字节(BYTE)由八个位组成&#xff0c;一个字(WORD)是二个字节或十六位&#xff0c;一…

Open CV系列学习笔记(八)图像直方图 2021-02-02

Open CV系列学习笔记&#xff08;八&#xff09;图像直方图 什么是图像直方图 图像直方图由于其计算代价较小&#xff0c;且具有图像平移、旋转、缩放不变性等众多优点&#xff0c;广泛地应用于图像处理的各个领域&#xff0c;特别是灰度图像的阈值分割、基于颜色的图像检索以…

关于PInvoke 和COM Interop

关于PInvoke 和COM Interop.1. 平台调用利用平台调用这种服务&#xff0c;托管代码可以调用在动态链接库 (DLL)&#xff08;如 Win32 API 中的 DLL&#xff09;中实现的非托管函数。此服务将查找并调用导出的函数&#xff0c;然后根据需要跨越互用边界封送其参数&#xff08;整…

51单片机板子在Keil中找不到Device设备该怎么办

之前我遇到这个问题是下载了五六个版本的KEIL想找相应的版本内置有STC15F2K60S2的芯片&#xff0c;但下载安装了好多版本也不行&#xff0c;也在网上找了很多解决方案&#xff0c;但大多都是都是MDK的PACK下载&#xff0c;直到有一天看到STC—ISP当中内置有相当方便的STC仿真器…

Open CV系列学习笔记(九)直方图应用 2021-02-03

Open CV系列学习笔记&#xff08;九&#xff09;直方图应用 直方图均衡化 在统计学中&#xff0c;直方图&#xff08;英语&#xff1a;Histogram&#xff09;是一种对数据分布情况的图形表示&#xff0c;是一种二维统计图表&#xff0c;它的两个坐标分别是统计样本和该样本对…

解决多线程代码

http://www.cnblogs.com/shanyou/archive/2008/10/25/1319283.html 解决多线程代码中的 11 个常见的问题 http://msdn.microsoft.com/zh-cn/magazine/cc817398.aspx 并行编程方面的设计注意事项 http://msdn.microsoft.com/zh-cn/magazine/cc872852.aspx 识别并发问题的工具和方…

Open CV系列学习笔记(十)直方图反向投影 2021-02-04

Open CV系列学习笔记&#xff08;十&#xff09;直方图反向投影 反向投影概念 反向投影是一种记录给定图像中的像素点如何适应直方图模型像素分布的方式&#xff0c;简单来讲&#xff0c;反向投影就是首先计算某一特征的直方图模型&#xff0c;然后使用模型去寻找图像中存在的…