Logo
Section 1 / 8

基本类型

本课程详细探讨了 D 语言中的基本类型及其特性。

检查点

基本类型

本课程详细探讨了 D 语言中的基本类型及其特性。

数据类型的需求

计算机中最小的数据单位称为位(bit)。一个位的值只能是0或1。由于仅能存储0和1两种值的数据类型用途非常有限,因此CPU支持更大规模的数据类型,这些类型由多个位组合而成。例如,一个字节通常由8个位组成。如果一个N位的数据类型是CPU最高效支持的数据类型,我们就称其为N位CPU,如32位CPU、64位CPU等。

尽管CPU支持的数据类型已经扩展,但仍不足以表示更高层次的概念,比如“学生姓名”或“一张扑克牌”。同样,D语言的基本数据类型也无法满足许多高层次概念的表示需求,原因在于这些概念往往涉及内存使用、特定操作等复杂要求。因此,这类概念必须由程序员通过定义**结构体(struct)和类(class)**来实现。

D语言的基本类型

D语言是静态类型的,这意味着每个表达式都有一个确定的类型。D语言的基本类型与其他许多编程语言非常相似,如下表所示:

D语言的基本类型
D语言的基本类型

注意:除了上述类型外,关键字void表示“无类型”。关键字cent和ucent为将来预留,用于表示有符号和无符号的128位数值。

整数可以用int表示。若要表示带有小数部分的概念,则应使用double。

上表中出现的术语说明如下:

  • 布尔型(Boolean):逻辑表达式的类型,其值为true(真)或false(假)。

  • 有符号类型(Signed type):可以表示正数和负数的类型。例如,一个字节的取值范围是-128到127。这类类型的名称来源于负号(-)的存在。

  • 无符号类型(Unsigned type):只能表示非负数的类型。例如,ubyte的取值范围是0到255。“u”前缀来自“unsigned”(无符号)。

  • 浮点型(Floating point):能够表示带小数点的数值,如1.25。浮点运算的精度与类型所占的位数直接相关:位数越多,精度越高。只有浮点类型可以表示分数;整数类型如int只能表示整数值,如1、2等。

  • 复数类型(Complex number type):能够表示数学中的复数,形式为“a + bi”。

  • 虚数类型(Imaginary number type):仅表示复数的虚部。表格中“初始值”一栏出现的“i”称为iota,在数学中等于-1的平方根。

  • NaN:全称为“非数字”(Not a Number),表示无效的浮点数值。

类型的属性

D语言中的类型具有属性。属性通过在类型名后加点号(.)来访问。例如,int类型的sizeof属性可通过int.sizeof访问。本章将介绍一些类型的重要属性:

  • .stringof:表示该类型的名称。

  • .sizeof:表示该类型占用的字节数(若需计算位数,需将此值乘以8,因为1字节=8位)。

  • .min:表示该类型能表示的最小值。

  • .max:表示该类型能表示的最大值。

  • .init:表示该类型的初始值(默认值);当未指定初始值时,D语言会自动赋予该值。

示例:int类型

以下以int类型为例,展示其属性:

...
int类型的属性

以下是显示int类型各项属性的程序代码:

1import std.stdio; 2 3void main() { 4 writeln("字节长度: ", int.sizeof); 5 writeln("最小值: ", int.min); 6 writeln("最大值: ", int.max); 7 writeln("初始值: ", int.init); 8}

size_t类型

你可能会偶尔遇到size_t类型。size_t并非独立类型,而是现有无符号类型的别名。其名称来源于“大小类型”(size type)。它是最适合表示变量大小、数组元素个数等概念的类型。

size_t的大小足以表示程序可能使用的内存字节数。其实际大小取决于系统架构:在32位系统上为uint,在64位系统上为ulong。因此,在32位系统上,ulong比size_t更大。

你可以使用.stringof属性查看当前系统中size_t别名的具体类型。

注意:你不能在程序中使用保留类型cent和ucent;此外,void类型不具有.min、.max和.init属性。同时,浮点类型的.min属性已被弃用。若使用浮点类型,编译器会发出警告,提示.min不适用于该类型。如后续浮点类型课程所述,应改用.max的相反数,例如-double.max。

快速测验!

请尝试在本课前面提供的代码中使用不同的数据类型,然后完成以下测验。


下一课我们将学习如何给变量赋值。

Quiz

单选题

char 的字节长度为 ____。

1 / 5

D语言入门

给变量赋值