编程编码知识汇总

2023-11-21 09:45:54 数码极客 bianji01

 

学习编程的基础知识,如何做

编程的基础知识包括:小学、初、高中基础课程,大学计算机科学专业所有基础课、专业基础课和专业课(杂课不用学)。如果一般搂一下基础,找些快速入门的书比划比划,也能编。但是要想作为职业,绕不开上面那些知识,每门课涉及到的知识在实际工作中只要遇到,都是迈不过去的坎。计算机的工作原理:计算机是用来处理信息的机器,早期的只是用来做数学运算。要让机器做运算,唯一的办法就是让机器只做简单的几种动作,这几种简单动作的组合可以模拟最基本的逻辑运算和加法运算,复杂运算都转化为多次加法运算,然后机器的系列动作就可以做复杂的运算。事实上计算机的设计就是按这个思路,晶体管设计成2个状态,通和闭,用晶体管搭建2个状态的与门或门和非门,再用这3个逻辑门搭建加法器,所有运算都转化为二进制的加法运算和3个逻辑门运算。用编码描述指令,稍微复杂运算的编码是由多条指令构成,这个就是程序。程序的执行过程是这样的,每次只读取一个指令,然后结合机器内部的状态做一次运算或传送,然后再执行下下一步指令。直到终止,这既是模仿人在纸上手算的过程,也是最容易让机器模拟运算的方案,这个方案就是图灵机。信息用二进制编码,用多位的二进制数列与数值,字符和指令一一对应,用晶体管搭建内部存储器,用磁性介质或光盘做外部存储器。现代计算机是按冯.诺依曼结构,由存储器,控制器, 运算器,输入输出设备构成,每条指令前半部分是操作码,后半部分是操作数,都是地址指令,指向同一个存储器中的不同位置。存储器是用晶体管搭建的,存取速度很快,和控制器运算器同步工作。每次工作时程序要先从外部介质传送到存储器中,然后按顺序执行存储器中的指令序列,每条指令长度是固定的32位或64位二进制数字。执行完一条指令后再执行下一条。计算机本质上只能做哪些事情?§ 算术运算:加减乘除§ 逻辑运算:或,与,非§ 关系运算:大于,小于,等于,不等于§ 数据传输:输入,输出,赋值,移位如果不能把任务转化为这些指令,计算机就无法胜任。进一步扩展,从更高的层级上看,计算机可以做这些事情:§ 信息表达:计算机是用多位二进制数和信息一一对应的,凡是可用编码对应的信息都可以用计算机表达。如:数值,字母,文字,符号,声音,图像,视频。§ 信息处理:如信息拷贝,信息传送,数值的运算,信息的查找,信息的排序,信息的替换和修改,典型的应用有:发电邮,打游戏,数学运算,仿真,管理软件,office 套件,百度搜索,淘宝购物等。算法在广义上可以是指解决问题的步骤,如菜谱,说明书等,但这狭义上只指利用计算机解决问题的方法,我们可以叫计算机算法,也可以直接叫算法。首先我们要清楚计算机在本质上只能做算术运算,逻辑运算,关系运算和数据传输,要解决的问题只能转化为这些操作来实现。另外为让计算机做这些操作,在高级计算机语言中,我们还设计了必要的控制指令,如:输入,输出,赋值,移位,循环,停止,判断选择。计算机算法就是把问题转化为计算机能做的运算和指令系列。例如求解方程:计算机无法直接描述方程式,我们只能用系数值的序列来等效描述,一次方程的求解方法是让x的系数变成1,高次方程的求解方法是利用曲线的连续性和区间内的单调性,按指定方向多次取x值,让y值逼近0,足够接近时的x取值就是解。计算机无法像人一样用因式分解的方式求解高次方程。在高级的数学软件中,如mathematica,方程可以直接像平常一样描述(如:x^2 + y^3 = 10),但软件的后台还是要把它们转化为系数数组来表示。计算机语言中,有运算符可以直接进行加减乘除运算,但不能直接做三角函数,开方,对数,求导等其他数学运算,这些运算只能通过特定算法转化为加减乘除,得出近似结果。在专用数学软件中,这些运算都有设计好的函数,直接可以调用,使用方便。数的给出可以是有理数,但不能是无理数,不能把一个无理数赋值给变量。计算机也不能直接做推理或做数学证明,也不会简化关系式,我们只能另外设计算法,把这些问题转化为加减乘除和逻辑运算,而且只有部分问题可以这样转化。上面方程例子中也讲到,计算机不能直接描述变量间的关系,包括方程和不等式,只能变成其他的等效描述,求解更是如此。计算机也不能直接描述几何图形和图形关系,只能通过数组对应关系等效描述,而且取值不能无限多。计算机更不能直接翻译和判断对错,只能通过事先的对应关系设定,或者通过大数据统计,计算出对应关系的概率值。计算机不能直接描述声音,只能通过有限的取样,把每个样的声音的大小用二进制编码,播放的时候,二进制编码转化成电压大小信号,输送给音响,两个相邻样声音过渡用电容平滑下来。计算机也不能直接描述图像,只能通过有限取样做像素,每个像素用二进制编码描述亮度和颜色,显示的时候,二进制编码转化为电压大小信号,控制发光元件,两个相邻样像素不作过渡。要彻底掌握计算机能做哪些事情,不能做哪些事情,以及如何转化,需要学习离散数学,但针对常见的问题,只要不是特别复杂,凭直觉也能想出算法。总体来说,现实问题只有部分可以转化为数学问题,数学问题只有部分可以转化为离散数学问题,离散数学问题只有部分可以转化为计算机算法。即使这样,计算机依然可以帮助我们解决大部分信息处理方面的问题,彻底改变人类社会,我们每个人都应该掌握必要的算法知识,这样才能立足于信息社会。常用的计算机算法:最基本的算法是循环,通过循环充分利用计算机高速的特点,同时减少人工输入和代码编写。§ 循环体执行同样的运算§ 循环体执行渐变的运算,又分为递推循环和递归循环。其中递归循环是计算机独有的算法,很多问题只能用递归算法才能解决,如8皇后问题,上楼梯问题。以循环算法为基础,又扩展成4种常用算法,解决更复杂的问题。§ 贪心算法 greedy algorithm§ 分治算法 divide and conquer§ 动态规划 dynamic programming§ 穷举搜索 exhustive searching大部分复杂问题都能用这4种算法解决。§ 人做的事情少,输入少,代码短§ 电脑做的事情少:运算少,指令少§ 占的资源少,少占内存,少占寄存器§ 通用性强,最好可以封装成函数,随时调用§ 指令模块化,整体按顺序结构,不上下转移,不交缠在一起,便于阅读和理解指利用计算机语言描述算法,为方便使用计算机,我们发明了各种高级计算机语言,用容易理解的术语来描述操作和指令。如:各种数据类型,赋值语句,循环语句,选择判断语句,运算符,输入输出命令符。编程就是用计算机语言,通常是指高级语言描述整个算法。编程的过程是这样的:第一步先明确要解决的问题第二步是思考和选择合适的数据结构描述问题,是数组呢,线性表呢,还是树或图来描述第三步是在数据结构基础上,思考解决问题的步骤,即算法第四步是用流程图或伪码描述整个算法最后一步是选择合适语言,按流程图或伪码写代码。仍然用解方程做例子。如线性方程组:第一步选择数据结构描述方程组,可以选择数组或矩阵描述系数值,把每个方程写成统一的格式:a*x + b*y + c*z = d,每个方程就可以用数组 [a,b,c,d]来描述,缺项的系数值是0。第二步是在数组的基础上思考解方程的算法,方程的解用数组怎样表示呢,很容易想到把a变成1,b和 c变成0就是x的解,解线性方程组的过程就等效于把数组间加减乘除运算,数组间的加减乘除必须联系方程本身,这样才能判断所做的运算是不是等效的,如把一个数组同乘一个数,相当于方程的两边同乘一个数,是等效的,两个数组相减,相当于两个方程两边相减,是等效的,选择合适运算最终目的是变成[1,0,0,d1] [0,1,0,d2] [0,0,1,d3],这样就求解出x y z值了。有了算法后边的步骤就很容易了,画流程,写代码。1.大致清楚计算机工作原理,电路如何实现非门,与门,或门,如何搭建加法器2.大致了解图灵机思想,机器必须一步一步运算,运算都是几种简单动作的重复,大致了解cpu的指令集有哪些指令,清楚计算机能做哪些事情,不能做哪些事情,清楚所有的操作最终都要转化为算术运算,逻辑运算,关系运算和数据转移,若不能转化为这些操作,就不能使用计算机解决。3.熟悉所选语言的基本语法,关键字,运算符,表达式,控制指令,数据类型,常用语句,函数等。4.敲代码实现基本的应用,如打印字符串,做简单的数学运算,简单排序,插入元素等5.熟练程序的基本结构:顺序结构,循环结构,选择结构。尤其是循环结构中的递推和递归结构,一定要熟练掌握。6.熟悉各种数据结构如何实现,基本的数据结构有数组,栈,队列,链表,树和图,必须掌握它们的实现方法和操作方法。7.针对常见的问题,掌握如何用算法实现,并写出完整代码8.掌握最基本的算法:贪心算法,动态规划,分治算法,穷举搜索。9.掌握什么是好的算法:时间上,资源上和人力上效率高,才是好算法。10. 多敲代码,随时把学到的和想到的用代码验证,不但让自己真正掌握,还会不断激发自己的学习兴趣。11. 常用的数据结构和算法,一定要亲自写代码实现,并规范化,通用化,保存在电脑中随时调用,当你电脑中积累到上万行这样的通用代码后,并熟悉语言中已有的函数库,你就会对编程有足够的自信,在实际应用上也会得心应手,成为编程高手。

计算机中编程编码问题

我看了一下书和部分汇编代码

首先,计算机中有符号整数是补码表示的;

而且加法就是直接将两个数的补码的二进制位相加,

(计算机中引入补码表示就是为了方便加减法的,注意可能有溢出情况)

减法是先求减数的补码再相加;

不是取值前有if判断模块,是因为

汇编码中在做加法时是add指令减法时是sub指令,这样在做减法时系统自然就知道取补码了

这时C语言减法的部分汇编码,VB中汇编码大同小异

5:intx=10;

00401048movdwordptr[ebp-4],0Ah

6:inty=20;

0040104Fmovdwordptr[ebp-8],14h

7:intz=x-y;

00401056moveax,dwordptr[ebp-4]

00401059subeax,dwordptr[ebp-8]//如果是加法则是add

0040105Cmovdwordptr[ebp-0Ch],eax

呵呵,还有什么问题可以多交流。

本回答由提问者推荐

我是电脑菜鸟!我想学电脑编码,编程方面的知识!请大家介绍入门方面的书籍!谢谢!

编程方面的知识

声明:易趣百科所有作品(图文、音视频)均由用户自行上传分享,仅供网友学习交流。若您的权利被侵害,请联系315127732@qq.com
广告位招租
横幅广告