高级语言,高级在哪?
高级语言、低级语言,都是对计算机而言。人类语言不存在这种说法。
在上篇文章(一分钟认识你的电脑)中,柚子向大家介绍了内存。
内存的最小单位是bit,二进制表示,并且大量、有序的排在一起。每连续8个bit,构成一个字节(byte)。
内存是有序的,所以内存也就有了地址。寻址原理在计算机逻辑结构这门大学课程中有详细的介绍,柚子不再赘述。
对于编程,有些地址知识是必不可少的。
地址用十六进制表示,比如0x010001FF。十六进制的取值是0~9、A、B、C、D、E、F。0x是代表十六进制,010001FF是具体的地址。
每个地址,对应的是一个字节,也就是寻址单位是字节。
嵌入式开发中,经常会遇到对某一位(bit)操作的问题。基本方法就是先寻址到字节,然后按位操作。在柚子今后的课程中,会有详细介绍。
普及地址的知识给小伙伴们热热身,然后今天我们要了解编程语言。
在内存和地址的知识中,柚子都提及了一个词,“进制”。计算机真正能识别的语言是二进制语言。
什么是二进制?
十进制的取值是0~9,逢十进一。
二进制的取值是0~1,逢二进一。
柚子是学习过计算机基本原理后对进制有了全新的认识。生活中使用的十进制,不过是一种习惯,改成n进制也是可以的。
为什么是二进制?
我们看到的计算机,是看得见,摸得着的机器。计算机的核心设备,CPU、内存等,也都是实实在在的电子元件。为什么它就能读懂语言了呢?实际上,计算机语言是在对电子元件进行操作。
让我们一起化繁为简,揭开计算机语言的神秘面纱。
电子元件由晶体管构成,基本元素是硅、锗。美国“硅谷”因此得名。
以目前最新的技术,晶体管最大切换频率达100GHz、最小单元可以做到1nm。2016年碳晶体管成功研制,比硅晶体管拥有更好的性能。
小伙伴们是不是都联想到了CPU的运算速度和内存的存储量?原因从这里来。
晶体管有个特性,开关特性,通俗的讲就是有电和没电,专业的讲是导通和截止。导通是1、截止是0。所以,计算机用晶体管的导通和截止当做自己的1、0语言。
柚子这里讲的是现代计算机,电子科学技术的发展,一直推动着计算机的进步。世界上最早的计算机,并不是使用晶体管,而是使用电子管。电子管和晶体管的原理不同,但是都是实现为二进制。
计算机只能识别二进制语言,科学家们通过对电子元件的组合设计,就有了编码。
每一个编码,都表示一次电子元件的状态,这个二进制编码,被命名为机器码。
最初的程序员编程是一项“体力活”。每次编程,都要拿着码表扣0101。这么低级,只能叫它低级语言。
在01车轮的不断碾压下,程序员终于不堪重负,决定对机器码再进行编码。
假设,用X标记0101000100110101。通过汇编器(翻译作用),以后写个X,就完成这个动作,方便很多,它叫做汇编语言。
汇编语言用标记的方式改变了01编码,但是它实际上还是直接对硬件进行操作,复杂且可读性差。汇编语言依然是低级语言。
虽然是低级语言,汇编语言却不是一无是处。汇编语言直接对硬件进行操作,特别适合编写硬件操作部分的代码,相比高级语言,有更高的执行效率。
再后来,程序员们就发明了更符合人类语言习惯,并且脱离了直接对硬件操作的语言,就是所谓的高级语言。
Basic、Pascal、C/C++、java、python、C#等,都是高级语言。我们今后的课程,先从C语言开始。
高级语言逻辑性更强、易学习、易掌握。
高级语言通过编译器(翻译功能)将程序编译成机器码。
现在比较主流的编译器是微软公司出品的Visual Studio系列,柚子从大学开始一直用这个系列,现在用的是Visual Studio2013。就是下面这个小骚紫。
小伙伴们有没有觉得涨姿势呢?
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- leetcode链表之找出倒数第k个节点
- ZooKeeper能解决什么问题?不能解决什么问题?
- 画解算法 77-组合
- Spring 源码系列之容器概览~
- Spring Security 中如何让上级拥有下级的所有权限?
- Spring Security 权限管理的投票器与表决机制
- 通过cycler实现属性的自动映射
- 为你的图片添加图例
- matplotlib中的黑魔法:constrained和tight layout
- 用不同的坐标系统对图形元素进行定位
- 对《丢鸡蛋问题》的一点补充
- HA(高可用)就像套娃,像胖子,剥掉一层还有一层
- 《丢鸡蛋问题》重制版来袭~
- 如何搭建一个完美的组件库?
- 架构师的初级技能,选组件!(2020更新版,非广告)