
- D 程式設計基礎
- D 程式設計 - 首頁
- D 程式設計 - 概述
- D 程式設計 - 環境
- D 程式設計 - 基本語法
- D 程式設計 - 變數
- D 程式設計 - 資料型別
- D 程式設計 - 列舉
- D 程式設計 - 字面量
- D 程式設計 - 運算子
- D 程式設計 - 迴圈
- D 程式設計 - 條件語句
- D 程式設計 - 函式
- D 程式設計 - 字元
- D 程式設計 - 字串
- D 程式設計 - 陣列
- D 程式設計 - 關聯陣列
- D 程式設計 - 指標
- D 程式設計 - 元組
- D 程式設計 - 結構體
- D 程式設計 - 聯合體
- D 程式設計 - 範圍
- D 程式設計 - 別名
- D 程式設計 - 混入
- D 程式設計 - 模組
- D 程式設計 - 模板
- D 程式設計 - 不可變物件
- D 程式設計 - 檔案 I/O
- D 程式設計 - 併發
- D 程式設計 - 異常處理
- D 程式設計 - 合約
- D - 條件編譯
- D 程式設計 - 面向物件
- D 程式設計 - 類與物件
- D 程式設計 - 繼承
- D 程式設計 - 過載
- D 程式設計 - 封裝
- D 程式設計 - 介面
- D 程式設計 - 抽象類
- D 程式設計 - 有用資源
- D 程式設計 - 快速指南
- D 程式設計 - 有用資源
- D 程式設計 - 討論
D 程式設計 - 資料型別
在 D 程式語言中,資料型別指的是一個廣泛的系統,用於宣告不同型別的變數或函式。變數的型別決定了它在儲存器中佔據多少空間以及儲存的位模式如何解釋。
D 中的型別可以分類如下:
序號 | 型別和描述 |
---|---|
1 | 基本型別 它們是算術型別,包括三種類型:(a) 整數,(b) 浮點數,以及 (c) 字元。 |
2 | 列舉型別 它們也是算術型別。它們用於定義變數,這些變數在整個程式中只能分配某些離散的整數值。 |
3 | void 型別 型別說明符 void 表示沒有值可用。 |
4 | 派生型別 它們包括 (a) 指標型別,(b) 陣列型別,(c) 結構體型別,(d) 聯合體型別,以及 (e) 函式型別。 |
陣列型別和結構體型別統稱為聚合型別。函式的型別指定了函式返回值的型別。我們將在下一節中看到基本型別,而其他型別將在後續章節中介紹。
整數型別
下表列出了標準整數型別及其儲存大小和值範圍:
型別 | 儲存大小 | 值範圍 |
---|---|---|
bool | 1 位元組 | false 或 true |
byte | 1 位元組 | -128 到 127 |
ubyte | 1 位元組 | 0 到 255 |
int | 4 位元組 | -2,147,483,648 到 2,147,483,647 |
uint | 4 位元組 | 0 到 4,294,967,295 |
short | 2 位元組 | -32,768 到 32,767 |
ushort | 2 位元組 | 0 到 65,535 |
long | 8 位元組 | -9223372036854775808 到 9223372036854775807 |
ulong | 8 位元組 | 0 到 18446744073709551615 |
要獲取型別或變數的確切大小,可以使用 sizeof 運算子。表示式 type.(sizeof) 以位元組為單位給出物件或型別的儲存大小。以下示例獲取任何機器上 int 型別的尺寸:
import std.stdio; int main() { writeln("Length in bytes: ", ulong.sizeof); return 0; }
編譯並執行上述程式時,會產生以下結果:
Length in bytes: 8
浮點數型別
下表列出了標準浮點數型別,包括儲存大小、值範圍及其用途:
型別 | 儲存大小 | 值範圍 | 用途 |
---|---|---|---|
float | 4 位元組 | 1.17549e-38 到 3.40282e+38 | 6 位小數 |
double | 8 位元組 | 2.22507e-308 到 1.79769e+308 | 15 位小數 |
real | 10 位元組 | 3.3621e-4932 到 1.18973e+4932 | 硬體支援的最大浮點數型別或 double,兩者中較大者。 |
ifloat | 4 位元組 | 1.17549e-38i 到 3.40282e+38i | float 的虛數型別 |
idouble | 8 位元組 | 2.22507e-308i 到 1.79769e+308i | double 的虛數型別 |
ireal | 10 位元組 | 3.3621e-4932 到 1.18973e+4932 | real 的虛數型別 |
cfloat | 8 位元組 | 1.17549e-38+1.17549e-38i 到 3.40282e+38+3.40282e+38i | 由兩個 float 組成的複數型別 |
cdouble | 16 位元組 | 2.22507e-308+2.22507e-308i 到 1.79769e+308+1.79769e+308i | 由兩個 double 組成的複數型別 |
creal | 20 位元組 | 3.3621e-4932+3.3621e-4932i 到 1.18973e+4932+1.18973e+4932i | 由兩個 real 組成的複數型別 |
以下示例列印 float 型別佔用的儲存空間及其範圍值:
import std.stdio; int main() { writeln("Length in bytes: ", float.sizeof); return 0; }
編譯並執行上述程式時,在 Linux 上會產生以下結果:
Length in bytes: 4
字元型別
下表列出了標準字元型別及其儲存大小和用途。
型別 | 儲存大小 | 用途 |
---|---|---|
char | 1 位元組 | UTF-8 程式碼單元 |
wchar | 2 位元組 | UTF-16 程式碼單元 |
dchar | 4 位元組 | UTF-32 程式碼單元和 Unicode 程式碼點 |
以下示例列印 char 型別佔用的儲存空間。
import std.stdio; int main() { writeln("Length in bytes: ", char.sizeof); return 0; }
編譯並執行上述程式時,會產生以下結果:
Length in bytes: 1
void 型別
void 型別指定沒有值可用。它用於兩種情況:
序號 | 型別和描述 |
---|---|
1 | 函式返回 void D 中有許多函式不返回值,或者可以認為它們返回 void。不返回值的函式的返回型別為 void。例如,void exit (int status); |
2 | 函式引數為 void D 中有許多函式不接受任何引數。不帶引數的函式可以接受 void。例如,int rand(void); |
此時您可能無法理解 void 型別,因此讓我們繼續,我們將在後續章節中介紹這些概念。