加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

非常规入门之一:通用编程语言技术基础(一)

发布时间:2022-10-15 08:01:20 所属栏目:MsSql教程 来源:网络
导读: 1、《非常规入门》系列将会出现让各位小伙伴感到陌生的词汇,其中大部分词汇是我根据经验进行总结而组合或创造使用的。所以可能第一感觉会是“乱用词”。但是我会尽量做到严谨。
2、《非常

1、《非常规入门》系列将会出现让各位小伙伴感到陌生的词汇,其中大部分词汇是我根据经验进行总结而组合或创造使用的。所以可能第一感觉会是“乱用词”。但是我会尽量做到严谨。

2、《非常规入门》系列的核心在于“非常规”,UP主深知大学教学中的“特点”。UP主大二(软件工程专业)开始写编译器,对于编程语言的特点也算有些理解,但是随着学习深度的加深,有些理解也有可能是错误的。故而在投稿后,也会不定期的进行不同程度的修改。如果文章内容出现重大错误,也可能会选择重新投稿。

3、基于第2点,也希望B站的小伙伴们,能够指出文章中不恰当的地方,我会第一时间进行推敲、改动。

4、希望各位小伙伴多多转发,共同进步。

一、一代数据类型

在所有编程语言中,数据类型是有效数据在内存中存储方式、操作方式的约束。但是在所有编程语言,所有的数据类型均是由数值演化而成,更精确的讲,是无符号整数。

由数值演化出的第一批能够处理数据的数据类型有:无符号整数、字符、布尔。可以姑且称之为“一代数据类型”。即这些类型能够由硬件原生实现,而无需修改任何规则(或任何标准)。

我们能够感受到这三个数据类型只是根据由于无符号整数的字节长度进行划分的。但实际上并未对最底层数据类型进行“根本性质”的改造。

而这三种类型是所有数据类型构造的基础。在此产生3个问题:

问题1:浮点为什么不属于“一代数据类型”

解答:浮点能够使用有限的无符号整数进行表达,即使不使用多个整数进行分段表示,浮点运算已经改变了“一代类型”的基本运算方式,即在“基本四则运算”过程中,无法直接通过基本运算直接获取。无论CPU是否直接支持浮点数运算,浮点数的格式也不属于能够直接表示的范畴。

问题2:字符串为什么不属于“一代数据类型”

解答:字符串是有限字符的序列。无论字符串有多短,都改变了“一代类型”访问方式。字符串的访问方式必须是首地址+偏移地址的形式,其中偏移地址可以省略。

问题3:地址为什么不属于“一代数据类型”

解答:在内存中,地址就是一个能够标识内存长度与基本字长的数字,本身由标准文档中的设计而产生,本身属于硬件特性。即地址就是一个能够使用的无符号整数。

二、一代数据结构

在上文中,解释了所有数据类型的原始形式,即一代数据类型。但是在计算机的数据处理中,不可能只有整数、字符、布尔三种简单的类型结构。由此需要通过这些已经能够“原生实现”的一代数据类型演化出一些“复杂的”数据类型。

复杂的数据类型由两种实现形式:1、在结构上改变或组合多个一代数据类型;2、在运算方式上进行改变。

当然结构上的改变必然带来运算方式上的改变,而运算方式的改变也会产生一定的结构变化。

既然一代数据类型在数据类型中具有基础性地位,那么一代数据结构也应该具有基础性地位。故而,可以构造出:结构体、数组。

需要特别说明的是,一代数据结构是对所有非基本数据类型的高度抽象。

问题1:为什么有结构体,而没有联合体、枚举体?

解答:联合体、枚举体是特殊的结构体。联合体的成员“共用”一段内存空间,而如何共用不需要向用户(程序员)进行说明,而使用方式与结构体保持一致。枚举体内部的赋值方式是有序的,在访问方式上能够与结构体保持一致,且亦能够直接访问其成员。

问题2:类为什么不属于一代数据结构?

解答:类的有些成员不属于能够“原生实现”的部分。一代数据结构的成员都是能够“原生实现”的。

三、基本数据类型

利用一代数据类型和数据结构,总结(抽象)出能够处理现所有文本的基本内容,同时,基本数据类型也是数据处理过程中基本单位。

至此,现今所有编程语言通用的数据类型就能够和大家见面了。

基本数据类型是对底层数据类型的封装与实现,即包装。基本数据类型内部的处理必须是面向过程和指令式的。不同基本数据类型的实现方式可以产生差异,而在使用过程中,这些差异体现在数据处理的效率和精度上。

基本数据类型可以划分为:布尔型(bool)、字符型(char)、整型(包含不同宽度、有无符号byte、short、int、long、long long)、浮点型(float或double)、字符串型(string)、空类型(void或null)

例如:浮点型能够使用整型进行实现,也能够使用字符串进行实现。使用整型实现,处理效率高,但无法完全保证精度(可能精度高、可能精度低);使用字符串进行实现,处理效率较低,但能够完全保证精度。

需要注意的是,无论是哪种编程语言(至少是通用编程语言),除非语言领域有特定限制,那么必须包含上述6种基本数据类型,但编程语言实现中,不同语言的类型名称可能不一样,但类型处理方式要能够符合基本数学原理。

问题:为何要说类型处理方式要能够符合基本数学原理?

解答:整型相加必是整型,不太可能是浮点型。当然,“符合”也未必“完全遵守”。

四、复合数据类型

使用基本数据类型与一代数据结构(或类型)能够组合出用户(程序员)期望的数据结构或类型,同时复合数据类型的运算方式需要被重新定义。这些数据类型能够用于更为复杂的数据处理场景中,如高级语言编译器的设计与实现、数据库操作行为的设计与实现等。

复合数据类型已经处于编程语言特性之上,能够使用数学语言进行描述,本身已经脱离了编程语言的限制,是通用编程语言实现面向不同领域的基础。复合数据类型要求包含一定的设计思想mssql 通用数据类型,无论是面向过程还是面向对象,都要有封装、接口的概念,这也是“通用编程语言语言技术”的重要研究对象。

五、数据

在程序中,万物皆数据;而在用户(程序员)的角度,亦是如此。即使是函数,也是数据的一种。但是对于函数而言,数据是能够参与运算的最小单位。

数据必须包含数据在内存中的地址、数据的类型、数据的操作方式。

为了隐藏细节,现存的大多编程语言基本采用在定义语句中体现数据的以上特征。(如此说是因为在个别编程语言中,支持在使用中完成数据的定义或重定义。)

以C语言为例:

int number = 10;

这一段代码的含义是在内存中存储一个初始值为10的、且操作方式为4个字节的数据。

那么“number”呢?通过编程语言的标准文档说明,我们知道“number”是上述数据的标识符。实际上,在程序运行过程中,“number”这个字符串是不存在的,只是为了写给人看的。

于是引出以下定义:

标识符是有效数据存储在内存中物理地址的字符化表示。

但是这个定义缺少对于数据类型的涵盖,所以我们还需要对“数据类型”进行定义:

数据类型是有效数据在内存中存储方式、操作方式的约束。

以上就是通用编程语言技术的最重要的“基石”部分。当我们处理某一个程序错误时,我们就能够利用这些理论基础为解决问题找到较好的答案。当然,解决程序错误也不能只靠这些。

本章内容不需要完全理解,重点在于“数据、数据类型出现的原因”。

(编辑:晋中站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!