运算速度

计算机常识

走远了吗. 提交于 2020-04-07 05:42:24
计算机发展介绍 计算机硬件组成 计算机基本原理 计算机 计算机(computer)俗称电脑,是一种用于高速计算的电子计算机器,可以进行数值计算,又可以进行逻辑计算,还具有存储记忆功能。是能够按照程序运行,自动、高速处理海量数据的现代化智能电子设备。由硬件系统和软件系统所组成,没有安装任何软件的计算机称为裸机。 计算机发明者 约翰·冯·诺依曼 。计算机是20世纪最先进的科学技术发明之一,对人类的生产活动和社会活动产生了极其重要的影响,并以强大的生命力飞速发展。它的应用领域从最初的军事科研应用扩展到社会的各个领域,已形成了规模巨大的计算机产业,带动了全球范围的技术进步,由此引发了深刻的社会变革,计算机已遍及一般学校、企事业单位,进入寻常百姓家,成为信息社会中必不可少的工具。 发展历史 计算工具的演化经历了由简单到复杂、从低级到高级的不同阶段,例 ENIAC计算机 如从“结绳记事”中的绳结到算筹、算盘计算尺、机械计算机等。它们在不同的历史时期发挥了各自的历史作用,同时也启发了电子计算机的研制和设计思路。 1889年,美国科学家 赫尔曼·何乐礼 研制出以电力为基础的电动制表机,用以储存计算资料。 1930年,美国科学家 范内瓦·布什 造出世界上首台模拟电子计算机。 1946年2月14日,由美国军方定制的世界上第一台电子计算机“ 电子数字积分计算机 ”(ENIAC Electronic

汇编

青春壹個敷衍的年華 提交于 2020-04-06 22:00:40
一、介绍 汇编语言是一种面向机器的低级程序设计语言 汇编语言以助记符形式表示每一条计算机指令 助记符是便于人们记忆、并能描述指令功能和指令操作数的符号 助记符一般就是表明指令功能的英语单词或其缩写 MOV AX , 30H ADD AX , 50H MOV [2100H] , BX HLT 汇编语言的主要特点: 汇编语言程序与处理器指令系统密切相关 程序员可直接、有效的控制硬件系统 形成的可执行文件运行速度快、占用主存容量少 汇编语言程序中可以出现不同进制的数,但一定要有标识字母加以区别 数据的组织形式:位(bit)、字节(Byte)、字(Word)、双字(Dword) 无论是数据还是指令在计算机中都是以二进制形式存放的 无符号整数——所有有效位都当作数值处理,当然这样的数全部都是正数,故不保留符号位,常用于表示地址,或运算中表示计数值等 ASCII编码——在内存中使用一个字节(8位二进制数)存放一个字符(它的ASCII码),最高位没用(写0).在通信过程中最高位有时用于奇偶校验 数码0~9:30H~39H 大写字母A~Z:41H~5AH 小写字母a~z:61H~7AH 空格:20H 带符号数的表示方法——采用补码表示法(补码存储、补码运算) 与、或、异或、非运算 二、计算机硬件相关知识 1、硬件 中央处理单元CPU 控制器、运算器、寄存器 存储器 主存储器:RAM和ROM

C语言编程优化运行速度

混江龙づ霸主 提交于 2020-04-06 04:02:18
1、选择合适的算法和数据结构 选择一种合适的数据结构很重要,如果在一堆随机存放的数中使用了大量的插入和删除指令,那使用链表要快得多。数组与指针语句具有十分密切的关系,一般来说,指针比较灵活简洁,而数组则比较直观,容易理解。对于大部分的编译器,使用指针比使用数组生成的代码更短,执行效率更高。 在许多种情况下,可以用指针运算代替数组索引,这样做常常能产生又快又短的代码。与数组索引相比,指针一般能使代码速度更快,占用空间更少。使用多维数组时差异更明显。下面的代码作用是相同的,但是效率不一样。 数组索引 指针运算 For(;;){ p=array A=array[t++]; for(;;){ a=*(p++); 。。。。。。。。。 。。。。。。 } } 指针方法的优点是, array 的地址每次装入地址 p 后,在每次循环中只需对 p 增量操作。在数组索引方法中,每次循环中都必须根据 t 值求数组下标的复杂运算。 2、使用尽量小的数据类型 能够使用字符型 (char) 定义的变量,就不要使用整型 (int) 变量来定义;能够使用整型变量定义的变量就不要用长整型 (long int) ,能不使用浮点型 (float) 变量就不要使用浮点型变量。当然,在定义变量后不要超过变量的作用范围,如果超过变量的范围赋值, C 编译器并不报错,但程序运行结果却错了,而且这样的错误很难发现。 在

c语言中的代码优化《转》

痴心易碎 提交于 2020-04-06 03:03:44
在性能优化方面永远注意80-20原则,即20%的程序消耗了80%的运行时间,因而我们要改进效率,最主要是考虑改进那20%的代码。不要优化程序中开销不大的那80%,这是劳而无功的。 第一招:以空间换时间   计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题,我们就有了解决问题的第1招--以空间换时间。比如说字符串的赋值: 方法A:通常的办法 #define LEN 32 char string1 [LEN]; memset (string1,0,LEN); strcpy (string1,"This is a example!!"); 方法B: const char string2[LEN] ="This is a example!"; char * cp; cp = string2 使用的时候可以直接用指针来操作。 从上面的例子可以看出,A和B的效率是不能比的。在同样的存储空间下,B直接使用指针就可以操作了,而A需要调用两个字符函数才能完成。B的缺点在于灵活 性没有A好。在需要频繁更改一个字符串内容的时候,A具有更好的灵活性;如果采用方法B,则需要预存许多字符串,虽然占用了大量的内存,但是获得了程序执 行的高效率。 如果系统的实时性要求很高,内存还有一些,那我推荐你使用该招数。 第二招: 使用宏而不是函数。   这也是第一招的变招

基于MATLAB的腐蚀膨胀算法实现

ε祈祈猫儿з 提交于 2020-04-04 04:01:01
  本篇文章要分享的是基于MATLAB的腐蚀膨胀算法实现,腐蚀膨胀是形态学图像处理的基础,腐蚀在二值图像的基础上做“收缩”或“细化”操作,膨胀在二值图像的基础上做“加长”或“变粗”的操作。   什么是二值图像呢?把一幅图片看做成一个二维的数组,那么二值图像是一个只有0和1的逻辑数组,我们前面Sobel边缘检测后的图像输出边缘效果,设置个阈值,大于阈值输出为1,小于阈值输出为0,最后输出就是一幅二维图像了。 腐蚀   腐蚀是一种消除边界点,使边界向内部收缩的过程。可以用来消除小且无意义的物体。用3X3的结构元素,扫描图像的每一个像素,用结构元素与其覆盖的二值图像做“与”操作,如果都为1,结果图像的该像素为1。否则为0。结果会使二值图像小一圈。   有一个形象的比喻来可以说明该运算,用0表示蛀虫,1表示大米。蛀虫腐蚀大米的过程便是腐蚀运算, 腐蚀   如图所示,对于一个像素矩阵而言,只要有蛀虫(0)的存在,大米(1)就会被腐蚀掉了,即使只存在一个蛀虫(0),但是还是会被蛀虫腐蚀完毕,最后一幅图上面由于没有蛀虫(0)所以大米完好无损。 关于算法的实现,可以用下式子来表示,即3x3像素的运算: P = P11 & P12 & P13 & P21 & P22 & P23 & P31 & P32 & P33 在FPGA中,为了通过面积去换速度,我们将上式改变如下:               

软件设计师笔记---中央处理单元CPU

允我心安 提交于 2020-03-30 08:41:26
一、CPU的组成   CPU主要由运算器、控制器、寄存器组和内部总线等部分组成。    二、CPU的功能  1、程序控制。     CPU通过执行指令来控制程序的执行顺序,这是CPU的重要功能。 2、操作控制。     一条指令功能的实现需要若干操作信号配合来完成,CPU产生每条指令的操作信号并将操作信号送往不同的部件,控制相应的部件按指令的功能要求进行操作。 3、时间控制。     CPU对各种操作进行时间上的控制,即指令执行过程中操作信号的出现时间、持续时间及出现的时序都需要进行严格控制。 4、数据处理。     CPU通过对数据进行算术运算及逻辑运算等方式进行加工处理,数据加工处理的结果被人们所利用。所以,对数据的加工处理也是CPU最根本的任务。 三、运算器   1、运算器主要功能:     (1)执行所有的算术运算,如加、减、乘、除等基本运算及附加运算。     (2)执行所有的逻辑运算并进行逻辑测试,如与、或、非、零值测试或两个值的比较等。   2、各组成单元     (1)算术逻辑单元。 ALU是运算器的重要组成部件,负责处理数据,实现对数据的算术运算和逻辑运算。     (2)累加寄存器(AC)。 AC通常简称为累加器,它是一个通用寄存器,其功能是当运算器的算术逻辑单元执行算术或逻辑运算时,为ALU提供一个工作区。    (3)数据缓冲寄存器(DR)

Mac自带计算器的隐藏功能,你知道吗?

女生的网名这么多〃 提交于 2020-03-27 18:12:31
3 月,跳不动了?>>> 在计算机产业中苹果的Mac系列成为人们的首选,Mac计算机的强大功能更人们带来生活,办公等事物上带来便捷,在苹果Mac系列中却还有许多我们不知道的强大功能!其中包括 Mac 自带的《计算器》,就会出现一个小小的、简洁的计算器界面,可以进行简单的加减乘除的运算。你能发现它简洁的外表下潜藏的强大功能。 轻松转换 还在使用搜索引擎计算在人民币与各国货币、公里与英里之间转换吗?只需要在Mac的《计算器》里输入一个数值,再在「转换」菜单中选择单位类别(面积、长度、速度、温度等)即可随时进行转换。(《计算器》会使用最新汇率进行货币换算。) 科学计算 《计算器》的默认界面十分简洁,只显示基本的运算功能,而「显示」菜单中的「科学型」与「编程器」模式则提供了更多功能,比如在「科学型」模式下的分数、幂、开方、指数、对数与三角运算,甚至可以生成随机数。 在「编辑器」模式中,你可以进行二进制、八进制、十进制、十六进制与逐位运算,还可以查看一个数值对应的 ASCII 与 Unicode 字符。 P.S. 分别按快捷键 Command+1、Command+2、Command+3 即可切换「基本」、「科学型」和「编辑器」模式。 记录在案 《计算器》的记录功能(「窗口 - 显示记录」或者使用快捷键 Command+T )可以显示运算历史,你可以用它来检查或拷贝数字与计算过程。 RPN

Python 大概 转

↘锁芯ラ 提交于 2020-03-20 08:31:03
ref: http://www.cnblogs.com/vamei/p/3603046.html Python 的设计理念: 平衡于复杂强大的 C 和简单方便的bash。 Python良好的扩展性使得其功能十分全面:web 服务器, 网络爬虫, 科学运算, 机器学习, 游戏开发.... python 的运行速度并不好, 在编写高业务量,运算量的程序,可能python并不是最好的选择 python 的主体内容大致可以分为以下几个部分 1. 面向过程, procedure, if, loop, function 2. 面向对象,包含基本概念:类, 方法, 属性,继承 3. 功能应用: 包括IO,数据容器如表和吃点,内置函数,模块, 格式化字符串等 4. 高级语法: 上下文管理器, 列表推到,函数式编程,装饰器,特殊方法等 可以做的Python练习 1.建设一个网站 2. 做一个网页爬虫 3. 系统管理 Python功能全面,所以不用担心自己想的问题python解决不了(基本上Python解决不了的其他语言也没戏) 提前6:6-8 然而敬虔加上知足的心便是大利了,因为我们并没有带什么到世界上来,也不能带什么去,只要有衣有食就当知足。 来源: https://www.cnblogs.com/morningdew/p/5637741.html

Python学习笔记(一)

隐身守侯 提交于 2020-03-12 05:42:49
一.编程语言分类   编程语言是程序员和计算机沟通的介质,编程时程序员按照编程语言的语法风格将自己的思想流程编写下来。程序在未运行前和普通文件没有差别,只有在运行时,文件内所写的字符才有特定的语法意义。   编程语言按照发展历程分为:机器语言、汇编语言和高级语言。   机器语言:站在计算机的角度,使用计算机可以理解的二进制编程,直接操作硬件。优点是最底层,执行速度最快。缺点是最复杂,开发效率最低。   汇编语言:站在计算机的角度,使用英文标识符取代二进制编程,本质仍然是直接操作硬件。优点是比较底层,执行速度最快。缺点是复杂,开发效率最低。   高级语言:站在人的角度,使用人类语言字符编程,不再直接操作硬件。   按照编译方式分为:编译型和解释型。   编译型:需要编写完程序后,执行编译操作,将程序翻译成机器语言,以后直接执行机器语言的程序。优点是执行速度快,不依赖语言环境运行。缺点是调试麻烦,跨平台差。   解释型:在运行的时候将程序翻译成机器语言,所以运行速度相对于编译型语言要慢。优点是调试方便,跨平台好。缺点是执行速度慢,依赖解释器运行。 学习难度从高到低,执行效率从高到低,开发效率从低到高。速度不是关键(瓶颈理论),开发效率才是王道。 二.python介绍   python为解释型语言,需要通过python解释器来执行。   python3 test.py 程序执行过程:  

Eigen矩阵基本运算

血红的双手。 提交于 2020-03-07 07:06:00
1 矩阵基本运算简介 Eigen重载了+,-,*运算符。同时提供了一些方法如dot(),cross()等。对于矩阵类的运算符重载只支持线性运算,比如matrix1*matrix2是矩阵相乘,当然必须要满足矩阵乘法规则。对于向量和标量的加法(vector+scalar)这里并不支持,关于非线性运算这里暂不介绍。 2 加减运算 矩阵加减运算中必须要保证左右矩阵的行列对应相等。此外更重要的一点是,矩阵的类型也必须一致,这里的矩阵运算 并不支持隐式的类型转换 。矩阵运算中重载的运算符有: 二元运算符+:a+b 二元运算符-:a-b 一元运算符-:-a 复合运算符+=:a+=b 复合运算符-=:a-=b 下面是使用示例: #include <iostream> #include "Eigen\Dense" using namespace Eigen; int main() { Matrix2d a; a<<1,2, 3,4; MatrixXd b(2,2); b<<2,3, 1,4; std::cout<<"a+b=\n"<<a+b<<std::endl; std::cout<<"a-b=\n"<<a-b<<std::endl; std::cout<<"Doing a+=b;"<<std::endl; a+=b; std::cout<<"Now a=\n"<<a<<std::endl;