运算效率

移位 > 赋值 > 大小比较 > 加法 > 减法 > 乘法 > 取模 > 除法。

使用移位来代替乘除法,提高运算效率

 int a = 64;cout << "a / 2 = " << (a >> 1) << endl;cout << "a / 4 = " << (a >> 2) << endl; cout << "a / 8 = " << (a >> 3) << endl;cout << "a * 2 = " << (a << 1) << endl;cout << "a * 4 = " << (a << 2) << endl;cout << "a * 8 = " << (a << 3) << endl;/*
a / 2 = 32
a / 4 = 16
a / 8 = 8
a * 2 = 128
a * 4 = 256
a * 8 = 512
*/

加法比减法快,乘法比除法快原因是计算机硬件只能做加法,CPU里面都是加法器
计算机中有专门的移位功能部件,这也是最基础的部件。乘法和除法都是靠移位实现的。乘2^n,左移n位,除2^n,右移n位

另外,原始的乘法器是一步一步乘(移位)出来的,每次取乘数的一位与被乘数操作,1则把被乘数照写,0则为0,然后乘数右移。这样循环,最后把每一步结果加起来。
后面通过阵列连乘器改进速度,一次算出上面每一步的结果,然后直接相加。

乘法是加操作,而除法是每步的结果作加法或减法(加减交替法),有的算法还需要恢复上一次的结果(余数恢复法),而且每一步加减后还要进行移位,所以最慢。

从数学上讲,CPU中的ALU在算术上只干了两件事,加法,移位,顶多加上取反,在逻辑上,只有与或非异或。

加法->加法。

减法->取反,加法。

乘法->移位,逻辑判断,累加

除法->移位,逻辑判断,累减

至于乘法除法为什么这样,搜索二进制数如何进行乘法除法,说白了,和我们熟悉的十进制运算流程上一模一样。

所以只需要加法器,移位器和基本逻辑门电路就构成一个简单的ALU。

从硬件实现上讲,可以看出,实现这四种基本运算只需要上述硬件组件就行。早期的cpu里结构简单,只有这些组件,没有专门的乘法器、除法器。但是可想而知效率也是低下的(其中除法效率最低,因为每次移位后比乘法还多出一次试错操作),后来的cpu会集成专门的并行处理电路在cpu内建的协处理器(比如浮点运算器,很早的cpu是没有专门计算浮点的电路的)中,在硬件上实现,这样计算速度就快了。当然,计算的逻辑还是没变。

C/C++加减乘除运算效率分析相关推荐

  1. 有关加减乘除运算效率的简单测试

    public class Main {public static void main(String[] args)throws Exception{float x=3000;float y=0;lon ...

  2. 位运算实现加减乘除运算

    我们知道,计算机最基本的操作单元是字节(byte),一个字节由8个位(bit)组成,一个位只能存储一个0或1,其实也就是高低电平.无论多么复杂的逻辑.庞大的数据.酷炫的界面,最终体现在计算机最底层都只 ...

  3. c语言goord函数,php的chr和ord函数实现字符加减乘除运算实现代码

    php的chr和ord函数实现字符加减乘除运算实现代码 chr函数用于将ASCII码转换为字符 ord函数是用来字符转换为ASCII码 ASCII码是计算机所能显示字符的编码,它的取值范围是0-255 ...

  4. 简单工厂模式--加减乘除运算

    下面基于简单的<加减乘除运算>实例来讲讲实用简单工厂模式:<备注:以后根据认识的加深,可以添加和修改内容> 需求分析:希望程序提供"加减乘除"四种功能. 功 ...

  5. java用流体加减乘除_任意输入两个数,完成加法、减法、乘法、除法运算!(加减乘除运算分别定义四个方法)_学小易找答案...

    [简答题]编写程序实现菜单设计 [简答题]一层平面图 [简答题]编写一个程序实现大小写字母转换 [简答题]利用循环语句输出一个五行的等腰三角形,如下图 [简答题]编写一个程序实现交换两个变量的数值. ...

  6. (34)Verilog HDL算术运算:加减乘除运算

    (34)Verilog HDL算术运算:加减乘除运算 1.1 目录 1)目录 2)FPGA简介 3)Verilog HDL简介 4)Verilog HDL算术运算:加减乘除运算 5)结语 1.2 FP ...

  7. c 语言除法运算,C 语言简单加减乘除运算

    C语言也可以进行加减乘除运算,但是运算符号与数学中的略有不同,见下表. 加法 减法 乘法 除法 求余数 数学 + - × ÷ 无 C语言 + - * / % 加号.减号与数学中的一样,乘号.除号不同, ...

  8. 详解BigDecimal及其加减乘除运算

    目录 一.BigDecimal概述 二.构造函数详解 1.BigDecimal(int val) 2.BigDecimal(int val, MathContext mc) MathContext 3 ...

  9. 【Spark2运算效率】第三节 影响生产集群运算效率的原因之资源缺乏

    [Spark2运算效率][Spark2运算效率]第三节 影响生产集群运算效率的原因之资源缺乏 前言 问题概述 调整办法 结语 跳转 前言 面对复杂的业务问题,以及日益增多的需求,我们开发的脚本也越来越 ...

最新文章

  1. 【numpy】tensordot的用法研究
  2. 常用的webservice接口
  3. Ueditor富文本添加视频内容,视频不显示以及编辑富文本时,视频不显示解决方案
  4. Linux 网络编程——网络字节序(三)
  5. JWT(Json web token)认证详解
  6. [蓝桥杯][2018年第九届真题]日志统计(树状数组)
  7. 有进度条圆周率Π计算
  8. matlab dynprog,动态规划算法
  9. 阿里云天池 学习赛汇总(教学赛,零基础入门,长期赛)
  10. 为什么说 80% 的程序员都缺乏基本功?
  11. shp文件中polyline是什么_SHP文件坐标转换工具1.0版
  12. Linux 解压 .tar.bz2文件
  13. JavaWeb相关知识和技巧概括
  14. PyQGIS开发者手册-4 使用栅格图层
  15. 视频号户外直播备受用户及主播青睐
  16. iconst、bipush、sipush、ldc指令的区别
  17. mysql reads sql data_在其声明中使用DETERMINISTIC,NO SQL或READS SQL DATA并启用二进制日志记录...
  18. cgcs2000大地坐标系地图_我国大地坐标系_地图与地图制图
  19. oracle 闩锁(latch)概述
  20. ES摄入性能优化(插入提高了2倍+ 17w/s到37w/s)

热门文章

  1. 前端使用xlsx、file-saver实现自定义excel格式导出(列宽、字体、边框、行高)
  2. 惠普HP Photosmart 7458 打印机驱动
  3. 字体反爬之猫眼票房爬虫python
  4. 动视密码要输入8个字符怎么解决
  5. /usr/bin/ld: cannot find -lxxx 问题 解决方法总结
  6. 电脑录麦克风声音软件的选择
  7. 用c语言将2048的分数存档,利用C语言实现2048小游戏的方法
  8. 鼠标上下滚轮不灵敏的修复方法
  9. python文档相似性比较代码_Python使用gensim计算文档相似性
  10. 线上线下一体化趋势下,零售品牌如何利用线上营销为营收赋能?