Skip to content
Closed
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
154 changes: 86 additions & 68 deletions Data Types/readme_tw.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# [資料型別](#data-types)
# [資料型別](#資料型別)

在程式設計中,資料型別是一種分類,能指定變數具有哪種型別的值,以及可以對其進行哪種型別的數學、關係或邏輯操作而不會造成錯誤。

Expand All @@ -8,28 +8,29 @@

## 主要資料型別

- [原始資料型別](#primitive-data-types)
- [非原始資料型別](#non-primitive-data-types)
- [原始資料型別](#原始資料型別)
- [非原始資料型別](#非原始資料型別)

---

## [原始資料型別](#primitive-data-types)
## [原始資料型別](#原始資料型別)

「原始資料型別」是程式語言中最基本的資料型別,它們是那些更複雜資料型別的構成要素。原始資料型別由程式語言預先定義,並以保留字命名。
「原始資料型別 (Primitive data types)」是程式語言中最基本的資料型別,它們是那些更複雜資料型別的構成要素。原始資料型別由程式語言預先定義,並以保留字命名。

### 常見的原始資料型別

- [整數 (Integer)](#integer)
- [浮點數 (Float)](#float)
- [布林值 (Boolean)](#boolean)
- [字元 (Character)](#character)
- [字串 (String)](#string)
- [整數](#整數)
- [浮點數](#浮點數)
- [布林值](#布林值)
- [字元](#字元)
- [字串](#字串)

---

### [整數 (Integer)](#integer)
### [整數](#整數)

「整數 (Integer)」是可以是正、負或零的整數。在大多數程式語言中,整數是 32 位元的有符號整數,這表示它的值可以介於 -2,147,483,648 和 2,147,483,647 之間。而在某些程式語言中,整數可以是 64 位元,這表示它的值可以介於 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之間。

「整數」是可以是正、負或零的整數。在大多數程式語言中,整數是 32 位元的有符號整數,這表示它的值可以介於 -2,147,483,648 和 2,147,483,647 之間。而在某些程式語言中,整數可以是 64 位元,這表示它的值可以介於 -9,223,372,036,854,775,808 和 9,223,372,036,854,775,807 之間。


#### 範例:
Expand Down Expand Up @@ -57,9 +58,9 @@ let x = 5;

---

### [浮點數 (Float)](#float)
### [浮點數](#浮點數)

「浮點數」是可以有小數點的數字。在大多數程式語言中,float 是 32 位元的浮點數,也就是說它的值可以介於 1.175494351e-38 和 3.402823466e+38 之間。在某些程式語言中,浮點數可以是 64 位元,這表示它的值可以介於 2.2250738585072014e-308 和 1.7976931348623157e+308 之間。
「浮點數 (Float)」是可以有小數點的數字。在大多數程式語言中,float 是 32 位元的浮點數,也就是說它的值可以介於 1.175494351e-38 和 3.402823466e+38 之間。在某些程式語言中,浮點數可以是 64 位元,這表示它的值可以介於 2.2250738585072014e-308 和 1.7976931348623157e+308 之間。

#### 範例:

Expand Down Expand Up @@ -100,9 +101,9 @@ let x = 5.5;

---

### [布林值(Boolean)](#boolean)
### [布林值](#布林值)

「布林值」是一種資料型別,只能是兩個值其中之一:true 或 false。
「布林值 (Boolean)」是一種資料型別,只能是兩個值其中之一:true 或 false。

#### 範例:

Expand Down Expand Up @@ -136,9 +137,10 @@ let x = true;

---

### [字元 (Character)](#character)

「字元」是單一字母、數字或符號。在大多數程式語言中,一個字元是一個 16 位元的無符號整數,這表示它的值可以介於 0 到 65,535 之間。
### [字元](#字元)

「字元 (Character)」是單一字母、數字或符號。在大多數程式語言中,一個字元是一個 16 位元的無符號整數,這表示它的值可以介於 0 到 65,535 之間。

#### 範例:

Expand All @@ -165,10 +167,9 @@ let x = "a";

---

### [字串 (String)](#string)

### [字串](#字串)

「字串」是一連串的字元。在大多數程式語言中,字串是一組字元的陣列 (array)。
「字串 (string)」是一連串的字元。在大多數程式語言中,字串是一組字元的陣列 (array)。

#### 範例:

Expand Down Expand Up @@ -209,29 +210,30 @@ let x = "Hello World!";

---

## [非原始資料型別 (Non-Primitive Data Types)](#non-primitive-data-types)

「非原始資料型別」又稱為「參考資料型別」。它們由程式設計者創建,並非由程式語言定義。非原始資料型別也稱為「複合資料型別」,因為它們是由其他型別組成的。
## [非原始資料型別](#非原始資料型別)

「非原始資料型別 (Non-primitive data types)」又稱為「參考資料型別」。它們由程式設計者創建,並非由程式語言定義。非原始資料型別也稱為「複合資料型別」,因為它們是由其他型別組成的。

### 常見的非原始資料型別

- [陣列 (Array)](#array)
- [結構 (Struct)](#struct)
- [聯集 (Union)](#union)
- [指標 (Pointer)](#pointer)
- [函式 (Function)](#function)
- [類別 (Class)](#class)
- [串列 (List)](#list)
- [映射/字典 (Map/Dictionary)](#mapdictionary)
- [集合 (Set)](#set)
- [配對/元組 (Pair/Tuple)](#pairtuple)
- [陣列](#陣列)
- [結構](#結構)
- [聯集](#聯集)
- [指標](#指標)
- [函式](#函式)
- [類別](#類別)
- [串列](#串列)
- [映射/字典](#映射字典)
- [集合](#集合)
- [配對/元組](#配對元組)

---

### [陣列 (Array)](#array)
### [陣列](#陣列)

「陣列 (Array)」是一組存放在連續記憶體位置的項目集合。其概念是將多個相同型別的項目一起存放。這使得計算每個元素的位置變得更簡單,只需將偏移量加到基準值上,即陣列第一個元素的記憶體位置(通常以陣列名稱表示)。

「陣列」是一組存放在連續記憶體位置的項目集合。其概念是將多個相同型別的項目一起存放。這使得計算每個元素的位置變得更簡單,只需將偏移量加到基準值上,即陣列第一個元素的記憶體位置(通常以陣列名稱表示)。

#### 範例:

Expand Down Expand Up @@ -265,9 +267,9 @@ const x = [5, 10, 15, 20, 25];

---

### [結構 (Struct)](#struct)
### [結構](#結構)

「結構」是一組不同資料型別的變數集合,統一在一個名稱之下。它用來結合不同種類的資料項目。
「結構 (Struct)」是一組不同資料型別的變數集合,統一在一個名稱之下。它用來結合不同種類的資料項目。

#### 範例:

Expand Down Expand Up @@ -296,9 +298,10 @@ struct Person

---

### [聯集 (Union)](#union)

「聯集」是 C 語言中一種特殊的資料型別,允許在相同的記憶體位置存放不同的資料型別。你可以定義一個包含多個成員的聯集,但在任何特定時間內,只有一個成員可以存有值。聯集提供了一種有效利用相同記憶體位置來達成多重用途的方法。
### [聯集](#聯集)

「聯集 (Union)」是 C 語言中一種特殊的資料型別,允許在相同的記憶體位置存放不同的資料型別。你可以定義一個包含多個成員的聯集,但在任何特定時間內,只有一個成員可以存有值。聯集提供了一種有效利用相同記憶體位置來達成多重用途的方法。

#### 範例:

Expand All @@ -315,9 +318,9 @@ union Data {

---

### [指標 (Pointer)](#pointer)
### [指標](#指標)

「指標」是一種變數,其值為另一個變數的位址,也就是記憶體的直接位置。像任何變數或常數一樣,必須先宣告指標,才能用來儲存任何變數的位址。指標變數宣告的一般形式為:
「指標 (Pointer)」是一種變數,其值為另一個變數的位址,也就是記憶體的直接位置。像任何變數或常數一樣,必須先宣告指標,才能用來儲存任何變數的位址。指標變數宣告的一般形式為:

```c
type *var-name;
Expand All @@ -331,9 +334,10 @@ int *ip; // ip 是一個指向整數的指標。

---

### [函式 (Function)](#function)

「函式」是一組共同執行特定任務的敘述。每個 C 程式至少有一個函式,也就是 main(),而所有最簡單的程式都可以定義額外的函式。C 標準函式庫提供了許多內建函式,您的程式可以呼叫它們。
### [函式](#函式)

「函式 (Function)」是一組共同執行特定任務的敘述。每個 C 程式至少有一個函式,也就是 main(),而所有最簡單的程式都可以定義額外的函式。C 標準函式庫提供了許多內建函式,您的程式可以呼叫它們。

#### 範例:

Expand Down Expand Up @@ -375,9 +379,10 @@ function functionName() {

---

### [類別 (Class)](#class)

「類別」是一種使用者定義的資料型別,包含其自身的資料成員和成員函式,透過建立該類別的實例即可存取和使用。類別就像是物件的藍圖。
### [類別](#類別)

「類別 (Class)」是一種使用者定義的資料型別,包含其自身的資料成員和成員函式,透過建立該類別的實例即可存取和使用。類別就像是物件的藍圖。

#### 範例:

Expand Down Expand Up @@ -433,9 +438,10 @@ class Boat {

---

### [串列 (List)](#list)

「串列」被指定為有序物件的集合。列表類似於陣列,但列表的大小可以根據需要增長或縮小。列表也被稱為動態陣列。
### [串列](#串列)

「串列 (List)」被指定為有序物件的集合。列表類似於陣列,但列表的大小可以根據需要增長或縮小。列表也被稱為動態陣列。

#### 範例:

Expand All @@ -447,9 +453,10 @@ x = [1, 2, 3]

---

### [映射/字典 (Map/Dictionary)](#mapdictionary)

「映射」是一種資料結構,用於快速存取元素。每個元素以鍵值對(key-value pair)的形式儲存。映射中不能包含重複的鍵,每個鍵最多只能對應一個值。
### [映射/字典](#mapdictionary)

「映射 (Map)」是一種資料結構,用於快速存取元素。每個元素以鍵值對(key-value pair)的形式儲存。映射中不能包含重複的鍵,每個鍵最多只能對應一個值。

#### 範例:

Expand All @@ -468,9 +475,10 @@ map<string, int> x = {{"name", "John"}, {"age", 30}};

---

### [集合 (Set)](#set)

「集合」是指一組元素,其中沒有重複的元素。集合是無序的,這表示元素加入集合的順序並不重要。集合也被稱為無序列表。
### [集合](#集合)

「集合 (Set)」是指一組元素,其中沒有重複的元素。集合是無序的,這表示元素加入集合的順序並不重要。集合也被稱為無序列表。

#### 範例:

Expand All @@ -489,9 +497,10 @@ set<string> x = {"apple", "banana", "cherry"};

---

### [配對/元組 (Pair/Tuple)](#pairtuple)

「配對」是一種容器,用來一起儲存兩個值。「元組」是一種容器,用來一起儲存固定數量的值。這些值可以是不同型別的。
### [配對/元組](#配對/元組)

「配對 (Pair)」是一種容器,用來一起儲存兩個值。「元組 (Tuple)」是一種容器,用來一起儲存固定數量的值。這些值可以是不同型別的。

#### 範例:

Expand All @@ -512,15 +521,17 @@ tuple<string, string, string> x = {"apple", "banana", "cherry"};


## 資料型別轉換
「資料型別轉換」是將資料從一種型別轉換為另一種型別。在大多數情況下,資料型別轉換是由編譯器自動完成的。然而,有時你需要手動執行資料型別轉換以獲得預期的結果。

「資料型別轉換 (Data type conversion)」是將資料從一種型別轉換為另一種型別。在大多數情況下,資料型別轉換是由編譯器自動完成的。然而,有時你需要手動執行資料型別轉換以獲得預期的結果。

### 常見資料型別轉換
- [隱性轉換 (Implicit Conversion)](#implicit-conversion)
- [顯性轉換 (Explicit Conversion)](#explicit-conversion)
- [隱性轉換](#隱性轉換)
- [顯性轉換](#顯性轉換)

### [隱性轉換](#隱性轉換)

### [隱性轉換 (Implicit Conversion)](#implicit-conversion)
隱性轉換(Implicit conversion)」是指資料從一種型別自動轉換為另一種型別。當編譯器偵測到需要進行轉換時,會自動執行此轉換。例如:當你將較小資料型別的值指派給較大資料型別的變數時,編譯器會自動將該值轉換為較大的資料型別。

「隱性轉換」是指資料從一種型別自動轉換為另一種型別。當編譯器偵測到需要進行轉換時,會自動執行此轉換。例如:當你將較小資料型別的值指派給較大資料型別的變數時,編譯器會自動將該值轉換為較大的資料型別。
範例:

```c
Expand All @@ -533,9 +544,12 @@ x = 10 # x 是整數
y = float(x) # y 是浮點數
```

### [顯性轉換 (Explicit Conversion)](#explicit-conversion)

「顯性轉換」是指由程式設計者主動將資料從一種型別轉換為另一種型別。這種轉換是使用型別轉換運算子來完成。例如:當你將一個較大資料型別的值指派給較小資料型別的變數時,編譯器不會自動將該值轉換為較小的資料型別。在這種情況下,你必須使用型別轉換運算子將該值轉換為較小的資料型別。
### [顯性轉換](#顯性轉換)

「顯性轉換 (Explicit conversion)」是指由程式設計者主動將資料從一種型別轉換為另一種型別。這種轉換是使用型別轉換運算子來完成。例如:當你將一個較大資料型別的值指派給較小資料型別的變數時,編譯器不會自動將該值轉換為較小的資料型別。在這種情況下,你必須使用型別轉換運算子將該值轉換為較小的資料型別。


範例:

```c
Expand All @@ -561,12 +575,14 @@ y = int(x) # y 是整數

### 常見的符號型別

- [有號型別 (Signed Type)](#signed-type)
- [無號型別 (Unsigned Type)](#unsigned-type)

### [有號型別 (Signed Type)](#signed-type)
- [有號型別](#有號型別)
- [無號型別](#無號型別)

### [有號型別](#有號型別)

「有號整數型別 (Signed type)」可以表示正值與負值。

「有號整數型別」可以表示正值與負值。
最高有效位元(最左邊的位元, MSB)通常用來表示數值的符號:0 表示正數,1 表示負數(採用二補數表示法)。

例如:一個有符號的 8 位元整數可以表示的數值範圍是從 -128 到 127,因為最高有效位元被用來表示符號,剩下的 7 位元則用來表示數值本身。 在二補數表示法中,計算其可表示範圍的公式為:
Expand All @@ -581,9 +597,10 @@ y = int(x) # y 是整數
signed int a = -10;
```

### [無號型別 (Unsigned Type)](#unsigned-type)

「無號資料型別」只能表示非負的數值,包括零。
### [無號型別](#無號型別)

「無號資料型別 (Unsigned type)」只能表示非負的數值,包括零。
在二進位表示中,所有位元都用來表示數值的大小,不包含符號位元。常見的無號資料型別包括:無號整數 (unsigned int) 、無號短整數 (unsigned short)、無號長整數 (unsigned long) 等。

例如:一個無號的 8 位元整數可以表示的數值範圍是 0 到 255,因為它不包含符號位元,因此全部 8 個位元都用來表示數值本身,這使得可表示的正數範圍比有號整數更大。
Expand Down Expand Up @@ -617,9 +634,10 @@ unsigned int unsignedValue = 42;

防止溢位錯誤:在某些情況下,使用無號整數有助於避免因數值過大而導致的溢位錯誤。當超過最大可表示值時,無號整數會回繞至零,降低錯誤風險。

## 資料型別大小 (Data Type Size)

「資料型別大小」是指儲存某個特定資料型別的值所需的記憶體空間。資料型別的大小取決於編譯器與電腦架構,因此在不同的電腦之間可能會有所差異。 此外,資料型別的大小也可能因編譯器或作業系統的不同而有所變化。
## 資料型別大小

「資料型別大小 (Data type size)」是指儲存某個特定資料型別的值所需的記憶體空間。資料型別的大小取決於編譯器與電腦架構,因此在不同的電腦之間可能會有所差異。 此外,資料型別的大小也可能因編譯器或作業系統的不同而有所變化。

### 資料型別大小的比較(以 64 位元系統、x86-64 架構為基準)

Expand Down
Loading