什么是数据类型
编辑在计算机科学和计算机编程中,数据类型或简单的类型是数据的一个属性,它告诉编译器或解释器程序员打算如何使用数据。大多数编程语言支持整数(大小不同)、浮点数(近似实数)、字符和布尔值的基本数据类型。数据类型约束表达式的值,例如变量或函数,可能需要。此数据类型定义了可以对数据执行的操作、数据的含义以及存储该类型值的方式。数据类型提供一组值,表达式(即变量、函数等)可以从中获取其值。
概念
编辑数据类型在类型系统中使用,类型系统提供了定义、实现和使用它们的各种方法。不同的类型系统确保不同程度的类型安全。
几乎所有的编程语言都明确包含数据类型的概念,尽管不同的语言可能使用不同的术语。
常见的数据类型包括:
- 整数
- 浮点数字
- 布尔值
例如,在Java编程语言中,int类型表示值从-2,147,483,648到2,147,483,647的32位整数集合,以及可以对整数执行的运算,例如加法、减法和乘法。另一方面,颜色可能由三个字节表示,分别表示红色、绿色和蓝色的数量,以及一个表示颜色名称的字符串。
大多数编程语言还允许程序员定义额外的数据类型,通常是通过组合其他类型的多个元素并定义新数据类型的有效操作。例如,程序员可能会创建一个名为“复数”的新数据类型,其中包括实部和虚部。数据类型还表示对类型系统中数据解释的约束,描述存储在计算机内存中的值或对象的表示、解释和结构。类型系统使用数据类型信息来检查访问或操作数据的计算机程序的正确性。
数据类型类
编辑原始数据类型
原始数据类型通常是语言实现的内置或基础类型。
机器数据类型
基于数字电子的计算机中的所有数据都表示为最低级别的位(替代0和1)。数据的最小可寻址单元通常是一组称为字节的位(通常是一个八位字节,即8位)。由机器代码指令处理的单元称为字(截至2011年,通常为32或64位)。用于浮点算术的浮点数对字中的位使用不同的解释。
机器数据类型需要在系统或低级编程语言中公开或可用,允许对硬件进行细粒度控制。的C编程语言,例如,建筑材料整数类型不同的宽度,如和。如果目标平台上不存在相应的本机类型,编译器将使用确实存在的类型将它们分解为代码。例如,如果在16位平台上请求一个32位整数,编译器会默认将其视为两个16位整数的数组。shortlong
在更高级别的编程中,机器数据类型通常被隐藏或抽象为一个实现细节,如果暴露,会使代码的可移植性降低。例如,numeric可能会提供泛型类型而不是某些特定位宽的整数。
布尔类型
在布尔类型代表的价值观真和假。尽管只有两个值是可能的,但出于效率原因,它们很少被实现为单个二进制数字。许多编程语言没有明确的布尔类型,而是将(例如)0解释为false,将其他值解释为true。布尔数据是指如何将语言解释为机器语言的逻辑结构。在这种情况下,布尔值0指的是逻辑False。True总是非零,尤其是被称为布尔值1的一。
枚举
该枚举类型具有不同的值,其可以被比较和分配,但不一定必须在计算机的存储器中的任何特定的具体表示;编译器和解释器可以任意表示它们。例如,一副扑克牌中的四个花色可能是名为CLUB、DIAMOND、HEART、SPADE的四个枚举数,属于一个名为suit的枚举类型。如果变量V被声明为具有花色作为它的数据类型,可以将这四个值中的任何一个赋值给它。一些实现允许程序员为枚举值分配整数值,甚至将它们视为与整数类型等效的。
数字类型
如:
- 的整数数据类型,或“非分数”。可以根据它们包含负值的能力进行子类型化(例如unsigned在C和C++中)。也可具有小的预定义数目的亚型(如short和long在C/C++);或允许用户自由定义子范围,例如1..12(例如Pascal/Ada)。
- 浮点数据类型通常将值表示为高精度分数值(有理数,数学上),但有时会误导性地称为实数(令人联想到数学实数)。它们通常对xxx值和精度都有预定义的限制。通常以a×2b的形式在内部存储(其中a和b是整数),但以熟悉的十进制形式显示。
- 定点数据类型便于表示货币值。它们通常在内部实现为整数,从而导致预定义的限制。
- Bignum或任意精度数字类型缺乏预定义的限制。它们不是原始类型,出于效率原因很少使用。
复合类型
复合类型派生自多个原始类型。这可以通过多种方式完成。它们组合的方式称为数据结构。构成一个基本类型为化合物类型通常导致新类型,例如阵列的整数是一个不同类型的整数。
- 一个阵列(也称为载体,列表,或序列)的存储数量的元件,并提供随机接入到单个元件。数组的元素通常(但并非在所有上下文中)需要具有相同的类型。数组可以是固定长度的或可扩展的。数组中的索引通常需要是来自特定范围的整数(如果不是,可以通过谈论关联数组来强调这种放松)(如果该范围内的所有索引并非都对应于元素,则它可能是一个稀疏数组)。
- 记录(也称为元组或结构)记录是最简单的数据结构之一。记录是包含其他值的值,通常采用固定数量和顺序,通常按名称索引。记录的元素通常称为字段或成员。
- 联盟。联合类型定义将指定许多允许的原始类型中的哪些可以存储在其实例中,例如“浮点数或长整数”。与记录相反,记录可以定义为包含一个浮点数和一个整数;而在联合中,一次只允许一种类型。
- 甲标签联合(也称为变体,变体记录,识别联合,或不相交并)包含一个附加的字段,指示其当前型增强型安全性。
- 甲集是一个抽象的数据结构可以存储某些值,没有任何特别的顺序,并且不重复的值。值本身不是从集合中检索的,而是测试成员资格的值以获得布尔值“in”或“notin”。
- 一个对象包含许多数据字段,如记录,以及许多用于访问或修改它们的子程序,称为方法。
许多其他的都是可能的,但它们往往是上述的进一步变体和化合物。例如,链表可以存储与数组相同的数据,但提供顺序访问而不是随机访问,并且由动态内存中的记录组成;虽然可以说是一种数据结构而不是类型本身,但它也很常见且足够独特,因此在复合类型的讨论中包含它是合理的。
字符串和文本类型
如:
- 一个字符,可能是某个字母表中的一个字母、一个数字、一个空格、一个标点符号等。
- 一个字符串,它是一个字符序列。字符串通常用于表示单词和文本,尽管除了最琐碎的情况外,所有文本都不仅仅涉及字符序列。
字符和字符串类型可以存储字符集(例如ASCII)中的字符序列。由于大多数字符集都包含数字,因此可以使用数字字符串,例如"1234".但是,许多语言将它们视为属于与数值不同的类型1234。
根据所需的字符“宽度”,字符和字符串类型可以有不同的子类型。最初的7位宽ASCII被发现是有限的,并被8位和16位集取代,它们可以编码各种各样的非拉丁字母(如希伯来语和中文)和其他符号。字符串可以是适合拉伸的,也可以是固定大小的,即使是在相同的编程语言中也是如此。它们也可以按其xxx大小进行子类型化。
注意:字符串不是所有语言中的原始数据类型。例如,在C中,它们由字符数组组成。
抽象数据类型
任何没有详细说明数据的具体表示的数据类型都是抽象数据类型。相反,使用基于数据类型操作的正式规范来描述它。任何规范的实现都必须满足给定的规则。抽象数据类型用于形式语义和程序验证,并且不太严格地用于设计。
除了验证之外,规范可能会立即变成实现。例如,OBJ系列编程语言基于此选项,使用方程进行规范并重写以运行它们。代数规范是1980年左右CS的一个重要研究课题,几乎是当时抽象数据类型的同义词。它具有通用代数的数学基础。通过允许其他公式而不仅仅是方程,可以使规范语言更具表现力。
一个典型的例子是list、bag和set数据类型的层次结构。所有这些数据类型都可以通过三个操作声明:null,它构造空容器,single,它从单个元素构造一个容器,append,它组合了两个相同类型的容器。然后,可以通过对这些操作的以下规则来给出三种数据类型的完整规范:
-null是左右中性:追加(空,A)=A,追加(A,空)=A。-对于列表,append是关联的:追加(追加(A,B),C)=追加(A,追加(B,C))。-袋子增加交换性:追加(B,A)=追加(A,B)。-最后,集合也是幂等的:追加(A,A)=A。
可以通过以下方式指定对数据的访问,例如这些容器的成员函数:
-成员(X,单(Y))=eq(X,Y)-成员(X,空)=假-成员(X,append(A,B))=or(member(X,A),member(X,B))
其他类型
类型可以基于或派生自上述基本类型。在某些语言(例如C)中,函数具有从其返回值的类型派生的类型。
指针和参考文献
主要的非复合派生类型是指针,这是一种数据类型,其值直接引用(或“指向”)使用其地址存储在计算机内存中其他位置的另一个值。它是一种原始的参考。(在日常生活中,一本书的页码可以被认为是引用另一本书的一段数据)。指针通常以类似于整数的格式存储;但是,尝试取消引用或“查找”其值永远不是有效内存地址的指针会导致程序崩溃。为了改善这个潜在问题,即使底层表示相同,指针也被视为指向它们指向的数据类型的单独类型。
函数类型
虽然也可以为函数分配类型,但在本文的设置中,它们的类型不被视为数据类型。在这里,数据被视为与算法相对。在编程中,函数与后者密切相关。但是因为通用数据处理的核心动机是算法可以表示为数据,例如文本描述和二进制程序,数据和功能的对比是有限的。相反,函数也可用于编码数据。许多当代类型系统强烈关注函数类型,许多现代语言将函数解释为一等公民。
从概念上将函数从主题中排除在相关领域并不少见。例如,谓词逻辑不允许在函数或谓词名称上应用量词。
元类型
一些编程语言将类型信息表示为数据,从而实现类型自省和反射。相反,高阶类型系统虽然允许从其他类型构造类型并将它们像值一样通过函数传递,但通常避免基于它们进行计算决策。
实用程序类型
为方便起见,高级语言可能提供现成的“现实世界”数据类型,例如时间、日期和货币值以及内存,即使语言允许从原始类型构建它们。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/124585/