计算机是如何识别代码的(通俗理解版)

        首先,创建之初,计算机的作用就是通过 数据 + 方法 = 结果,也就是是给予计算机一个数据和数据之间关系的方法,例如1 1 2就是数据 1 + 1 = 2就是方法,也就是加法,计算机顾名思义就是通过计算已有的数据,使用固定的方法,然后计算出结果,其实人也是一个计算机,但是不同于人的是计算机是绝对的专注与死板,计算机不会受环境影响也不像我们人一样存在杂念,比如,在计算1+1=2的时候,我们接收的数据就是 1 1,然后加法就是计算方法 结果就是2,当然在计算一下简单数据的时候我们反应可能不比机器慢,因为机器我们还要去输入(当然如果同台竞技的,将机器拟人化的话,我们肯定比不过机器,毕竟存在反应时间,机器肯定更快),在计算小规模数据的时候,体现不出计算机的优势,但是当数据量庞大起来的时候,机器的优势和我们逐渐拉大

        这里也牵扯出一个新的东西就是算力,目前我的理解是,算力就是计算能力(非官方定义,个人理解),计算能力大小除了与计算速度相关还和同时处理的数据有关,一般我们说人厉害就喜欢眼观六路耳听八方,这就是说明一个人的算力很强大,因为他能在接收信息的时候同时处理多中信息(计算机来说就是多线程处理信息),哪怕就是简单的记住用计算机语言来说就是存储,那也非常厉害了,那还有一种人也经常被人说道的就是经常丢三落四,显而易见的这种人肯定不属于能进行多线程操作的人(多线程通俗理解就是可以同时处理多件事情,也就是眼观六路耳听八方的人),但是这并不能说明这个人的算力弱,之前也提到了算力是由计算速度和能同时处理多少数据决定的,这个人可能不能同时处理多条数据,但是他处理一个信息,或者说做一件事的时候非常高效,那么我们依旧可以说这个人算力很高,当然如果两者都高,那么可以说算力爆表,由此可以看出,一个人的算力其实是非常有限的,然而计算机在算力方面经过久远的发展已经非常强大,已经不是人可以比拟的了

        那么回到计算机是如何执行我们写的代码的呢?在我们的印象中其实计算机离不开0 1,计算机好像从诞生开始就与这两个值绑定在一起了,这也是我们计算机最开始就认识的语言了,就如同我们现在说的中文,是我们出生以来就一直使用的语言了,我们把这种机器是别的语言就叫做机器码,这也是机器执行最直接的语言,就像我们听到向前走指令,我们就知道向前走了,比如当机器看到00000001(比如这个机器码表达的是减)就知道要进行减法的操作了,这就是我们和机器沟通语言,机器能看到的语言也就是机器码,但是机器码的编写非常晦涩难懂,无论是编写、学习和维护都需要花费非常大的时间成本

        为此诞生了一种新的语言,叫做汇编语言,汇编语言得益于两个概念,一个是助记符,一个是汇编器,助记符可以简单理解,就是比如00000001(假设他是减),那么我们可以用add代表他,这样做的效果很明显,由于add是我们认识语言(英文的加),这样不但加大了代码的可读性,也降低编写和维护的成本,但是编写完了代码,归根结底还是需要交给计算机或者机器去运行的,那么汇编器就出现了,在我们编写完成需要执行的代码后,通过汇编器统一编译成计算机或者机器认识的语言,那么计算机就能顺利识别我们想要做的事情了,但是随着汇编语言的发展以及计算机复杂度的增加,虽然他解决了机器码晦涩难懂的缺点,但是在不同机器对于语法的规范不同(比如不同的机器厂家,他们对于汇编语言的定义不同,A认为enjoin指令编译成机器码是禁止做某事,而B任务是需要去做模式),这就使得我们代码的可移植性很差

        为此诞生了我们学计算机的较为熟悉的语言,C语言,目的就是为了解决汇编语言的短板,由统一的国际组织定义统一的规范,所有人都必须按照这个规范来,编译器才能编译对应的机器码,同时他和汇编语言其实还是很像,都是助记符语言,不同的是有了统一的定义和规范,有了统一的规范加上代码可读性的进一步加强,这样就解决了不同硬件的执行标准问题,c语言的优势就是元素简单,规则统一,与硬件无关,解决了目前大部分需求以及问题了,这可能也是为什么我到现在都听说很多硬件相关的专业还在学习c语言,可能是更接近与机器语言吧。所以机器是如何认识我们现在编写的代码的呢(c语言版本),在此之前我先做一个简单介绍,由上述可以知道,从代码到执行我们经历了四步,C语言→汇编语言→机器码→计算机执行代码

        我们把像c语言这种我们人类容易看的懂得语言就叫做高级语言,介于人类和计算机之间的叫做汇编语言,也可以称之为低级语言,而机器码(00000000,00000001)也就是机器能够直接看懂的语言就叫做机器语言。由此我们就知道了计算机到底是怎么知道我们人类想做做什么的,比如我们想进行1+1的操作:

C语言:

1+1

汇编代码:

ADD 1,1

机器码:

00000000

00000001

00000002

这就是我们告诉我们的代码如何被计算机执行的过程。

        其实这和我学习的语言还有一定的距离,我目前学习的是JavaScript语言,主流的语言非常多,常见的有C、C++、java、python等等,语言的类型很多,但是归宿都是一样的最终转换成机器码,每个语言都有他的优劣点,极端点说就是机器码的优点是机器马上就能看到去编译,执行速度快,但是编写、可维护性和易读性非常低,高级语言虽然易懂和学习,但是终究是需要编译的,速度肯定不如机器语言,但是他编写时间成本低,可维护性强,这是较为极端的例子,所以高级语言之间同样也是各有所长。

简单分析:

C++、java、python、js是面向对象的编程语言,c是面向过程的语言

python、java是强类型的语言,C、C++、js是弱类型的语言

js python 动态类型,C、C++、java是静态类型

js python是脚本语言和解释型语言

以上是个人阅读相关知识后的总结,由于本人知识水平有限,可能存在错误,非常感谢愿意指出错误的人,内容将持续更新,在学习的同时做下总结。

参考文章:

机器码,汇编语言,C语言,C++发展的认识_c语言和机器编码_weixin_52045136的博客-CSDN博客

猜你喜欢

转载自blog.csdn.net/weixin_54515240/article/details/129239629
今日推荐