大家好,今天小编关注到一个比较有的话题,就是关于c语言乙的问题,于是小编就整理了2个相关介绍c语言乙编译的解答,让我们一起看看吧。
机械语言到高级语言,经过了什么?
高级语言:
高级语言(High-level programming language)相对于机器语言(machine language,是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据)而言。是高度封装了的编程语言,与低级语言相对。它是以人类的日常语言为基础的一种编程语言,使用一般人易于接受的文字来表示(例如汉字、不规则英文或其他外语),从而使程序编写员编写更容易,亦有较高的可读性,以方便对电脑认知较浅的人亦可以大概明白其内容。由于早期电脑业的发展主要在美国,因此一般的高级语言都是以英语为蓝本。在1980年代,当东亚地区开始使用电脑时,在日本、台湾及中国大陆都曾尝试开发用各自地方语言编写的高级语言,当中主要都是改编BASIC或专用于数据库数据访问的语言,但是随着编程者的外语能力提升,现时的有关开发很少。
由于汇编语言依赖于硬件体系,且助记符量大难记,于是人们又发明了更加易用的所谓高级语言。在这种语言下,其语法和结构更类似汉字或者普通英文,且由于远离对硬件的直接操作,使得一般人经过学习之后都可以编程。高级语言通常按其基本类型、代系、实现方式、应用范围等分类。
机器语言:
机器语言(machine language)是一种指令集的体系。这种指令集,称机器码(machine code),是电脑的CPU可直接解读的数据。
机器码有时也被称为原生码(Native Code),这个名词比较强调某种编程语言或库,它与运行平台相关的部份。
顺序是这样的:机器语言、汇编语言、低级语言、高级语言。
计算机语言是人与计算机进行交流的工具,是用来书写计算机程序的工具。可以通俗地理解为,你用用特定的语言与特定的对象沟通,关键是需要有个翻译,这个翻译就是编译器或解释器,同样的语言,针对不同的对象需要有不同的编译器或解释器。所以说编程语言是“设计”出来的,设计只需要思考和写文档,而该语言的编译器或解释器才是“开发”出来的。编译原理讲到了“自举编译器”。大意就是先用底层语言汇编写一个能运行,但效率极低的C语言编译器有了C语言的编译器以后,就可以用C语言好好写一个编译器了,用之前那个运行没问题,但效率低得编译器编译一下,就得到了可以使用的编译器了。编译器也是程序,所以也需要用编程语言来编写,很多编程语言是用别的更基础的语言开发的,其中用最多的就是C语言。C语言编译器很多,大部分都是用别的C语言编译器编译出来的,而最早的C语言编译器是用汇编语言写出来的,最早的汇编语言编译器是通过“编译器自举”开发出来的。从最基本的角度看,一种编程语言就是把一组特定的词汇,按照一组特定的语法规则组合到一起,形成计算机可以通过某种方式“理解”的东西,可以让计算机据此执行特定的动作。
首先要决定你想设计的语言应该解决什么问题。面对不同的领域、不同的需求、不同的抽象层级、不同的思考范式,也就产生了各有特长的编程语言。所谓“计算机执行动作”,其实只是“把一个二进制数字传入 CPU,然后等待什么事情发生”的形而上描述。二进制计算机所能理解的唯一东西就是二进制数字,称为“机器码”。比如:10110 000 01100001这串数字,对于某颗 CPU 来说,就是“把 01100001 放到 000 号寄存器里”的指令,其中“10110”的部分,就是 CPU 能懂得的“放入”指令。这样的指还有许许多多,比如做加法、求逻辑“与”,跳转,加密等等,全都只是一些二进制数字而已。对人类来说,这种纯数字的写法太难记忆,就把它转写成:MOV AL, ***其中 MOV 代表“10110”,AL 代表 000 号寄存器,*** 则是二进制数 01100001 的十进制表示。其他的数字指令也一并用这种简记法来转写。使用这样的一种转写方法来写程序,就是汇编语言(当然,这是一种极度简化的说法)。汇编语言谈不上太多设计,其实几乎就是在直接告诉 CPU 应该做什么。把汇编语言转化为机器码的程序,称为“汇编器(Assembler)“。汇编语言的优势是很低级,你能直接控制 CPU 的行为;汇编语言的缺点也是它太低级,你必须直接控制 CPU 的行为。看看“把 A 的值放进甲寄存器;B 的值放进乙寄存器;把乙寄存器的值放进 A;把甲寄存器的值放进 B。”这段汇编指令执行后是什么结果?运行一下之后会看到,A 和 B 的值互换了。那么,能不能直接写“交换变量 A 和 B 的值”,然后由计算机来分解为一串机器码的组合呢?所谓的“高级”编程语言就是这样的原理。将高级编程语言翻译成机器码(或者其他更接近机器码的形式)的[_a***_],也就是计算机“理解”语言的过程,叫做“编译”,而完成这一工作的程序,叫做“编译器(compiler)”或者“解释器(interpreter)”,两者的区别是,编译器一次性解析所有代码并转换成机器码(但通常不会运行),而解释器则每解析一小部分就运行一小部分。接下来就要考虑两个问题:高级语言要让人写起来方便;也要让计算机易懂。因为人类是难搞的物种,所以前者通常是语言设计的重点。毕竟,只要懂些编程的基本知识,任何人都可以在三天时间里设计出一门计算机语言,并且让计算机读懂它(也就是写出编译器),但要让一种计算机语言写起来舒服、读起来易懂、管理起来方便,所需耗费的心力和时间则相去不可以道里计。探寻这一问题的种种思潮所引发的范式转换和生产力革命,是计算机历史的永恒主题之一。计算机语言越来越高级,使用起来越来越简单,实现却越来越复杂;许多编程观念比如面向对象(object orientation)、函数编程(functional programming)、***驱动(event driven)之诞生、沉寂、重现、兴盛和定型,都经由编程语言有所体现。当然这并不是说编译部分就不重要。可靠、高效、灵活的编译器是一切编程工作的基石。我们日常所用的编译器都是如此千锤百炼的东西,以至于你很少会意识到它们本身也是复杂的软件工程项目,也有可能出问题,也在不断地发展着。十年前和现在的编译器,从架构理念到实现都有不小的差别。
经历了不同层次的抽象。
汇编面向的是机器硬件指令集。
Java面向的是对象。
不同的抽象层次,关注点不一样。这和我们常说的分层开发道理一样。
我们在设计系统的时候也会继续层层向高级抽象。
抽象使得我们可以逐步利用低级的工具构建高级的工具,从而解决更高级的问题。
总共经历了三个阶段:机器语言,汇编语言,高级语言
第一阶段:机器语言
早期,计算机的使用者必须用二进制表示的指令编写程序,一般用八进制或十六进制书写,称为机器语言程序。机器语言每一条指令,都必须包含以下四方面(1)操作码。它具体说明了操作的性质及功能。(2)操作数的地址。CPU通过该地址就可以取得所需的操作数。(3)操作结果的存储地址。把对操作数的处理所产生的结果保存在该地址中,以便再次使用。(4)下条指令的地址。
第二阶段:汇编语言
以下程序用汇编语言实现打印:"hello world!"
因为机器语言工作量大,且容易出错,到20世纪50年代,出现了符号式程序设计语言,称为汇编语言,程序员可以用ADD,SUB,MUL和DIV等符号分别表示加法,减法,乘法,除法的操作码,并用符号来表示指令和数据的地址。汇编语言程序的大部分语句是和机器指令一一对应的。用户用汇编语言编写程序后,然后由计算机将它翻译成机器语言,然后在计算机上运行。这个翻译过程是通过系统程序员提供的汇编程序实现的。
第三阶段:高级语言
1:面向过程的语言:以c语言为代表
以下程序用c语言实现打印"hello world"
由于汇编语言依赖于特定的指令集,而各个处理器往往有不同的指令集,没有跨平台性,而且编程工作量大且易出错,到20世纪50年代,以c语言为代表的面向过程语言诞生,逐渐成为了主流编程语言。c语言具有以下特点:简洁,具有结构化的控制语句,丰富的数据类型,丰富的运算符,可对物理地址进行直接操作,代码具有较好的可移植性,可生成高质量、目标代码执行效率高的程序。我们熟悉的安卓,ios,其实都离不开c语言,到目前为止,c语言仍然是编写操作系统,和需要超高速度执行程序的首选语言。和汇编类似,首先由计算机将c语言翻译成汇编语言,其次再翻译为机器语言,最后由计算机执行。
光能传递信息吗?
光当然能传递信息,光纤就是例子。
现在信息技术非常先进,互联网非常流行,所以现代人都在通过宽带连接访问网站。为了保证信息的快速准确传输,光纤技术的发展起着重要的作用。
从一个常见的光学现象开始说,当入射光线从折射率较大的介质1(光学密度较大的介质)进入折射率较小的介质2(光学密度较小的介质)时,光线在折射后会偏离法线。入射角越大,折射光线的偏差就越大。当入射角等于临界角时c,光线将沿着界面折射。如果入射角大于临界角,光线将根据反射定律完全反射到介质1中。这种现象称为全内反射。见上图
简单光纤的中心由光密度较大的介质组成,而光密度较小的介质在外层形成窄管。介质的材料通常是玻璃或塑料。如果光线指向光纤的一端,它将在光纤中传输。当光线遇到中心层和外层之间的界面时,发生全内反射,并被反射回中心。尽管光线是直线传播的,但是光线将沿着光纤的方向传播,即使它是弯曲的。光纤被广泛应用于从通信到医疗设备(如内窥镜、光纤传感器或光纤装饰)的生产的各个领域。
这个时代的光纤通信利用光线强度的变化来表示不同的信号。如果携带信息的入射光线指向光纤的一端,光纤将把光线传输到另一端的接收器。原始信息可以通过转换器恢复。由于光线在通过玻璃纤维传输的过程中没有太多损失,因此信息可以在没有中间传输站的情况下传输很长的距离。几微米(比头发还细)的光纤每秒可以传输一千万个脉冲。由于相对于铜线的优越性,光纤正逐渐取代铜线成为主要的通信媒介。
到此,以上就是小编对于c语言乙编译的问题就介绍到这了,希望介绍关于c语言乙编译的2点解答对大家有用。