diff --git a/Data Types/readme_tw.md b/Data Types/readme_tw.md index 47da413f..3dea386d 100644 --- a/Data Types/readme_tw.md +++ b/Data Types/readme_tw.md @@ -1,4 +1,4 @@ -# [資料型別](#data-types) +# [資料型別](#資料型別) 在程式設計中,資料型別是一種分類,能指定變數具有哪種型別的值,以及可以對其進行哪種型別的數學、關係或邏輯操作而不會造成錯誤。 @@ -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 之間。 #### 範例: @@ -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 之間。 #### 範例: @@ -100,9 +101,9 @@ let x = 5.5; --- -### [布林值(Boolean)](#boolean) +### [布林值](#布林值) -「布林值」是一種資料型別,只能是兩個值其中之一:true 或 false。 +「布林值 (Boolean)」是一種資料型別,只能是兩個值其中之一:true 或 false。 #### 範例: @@ -136,9 +137,10 @@ let x = true; --- -### [字元 (Character)](#character) -「字元」是單一字母、數字或符號。在大多數程式語言中,一個字元是一個 16 位元的無符號整數,這表示它的值可以介於 0 到 65,535 之間。 +### [字元](#字元) + +「字元 (Character)」是單一字母、數字或符號。在大多數程式語言中,一個字元是一個 16 位元的無符號整數,這表示它的值可以介於 0 到 65,535 之間。 #### 範例: @@ -165,10 +167,9 @@ let x = "a"; --- -### [字串 (String)](#string) - +### [字串](#字串) -「字串」是一連串的字元。在大多數程式語言中,字串是一組字元的陣列 (array)。 +「字串 (string)」是一連串的字元。在大多數程式語言中,字串是一組字元的陣列 (array)。 #### 範例: @@ -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)」是一組存放在連續記憶體位置的項目集合。其概念是將多個相同型別的項目一起存放。這使得計算每個元素的位置變得更簡單,只需將偏移量加到基準值上,即陣列第一個元素的記憶體位置(通常以陣列名稱表示)。 -「陣列」是一組存放在連續記憶體位置的項目集合。其概念是將多個相同型別的項目一起存放。這使得計算每個元素的位置變得更簡單,只需將偏移量加到基準值上,即陣列第一個元素的記憶體位置(通常以陣列名稱表示)。 #### 範例: @@ -265,9 +267,9 @@ const x = [5, 10, 15, 20, 25]; --- -### [結構 (Struct)](#struct) +### [結構](#結構) -「結構」是一組不同資料型別的變數集合,統一在一個名稱之下。它用來結合不同種類的資料項目。 +「結構 (Struct)」是一組不同資料型別的變數集合,統一在一個名稱之下。它用來結合不同種類的資料項目。 #### 範例: @@ -296,9 +298,10 @@ struct Person --- -### [聯集 (Union)](#union) -「聯集」是 C 語言中一種特殊的資料型別,允許在相同的記憶體位置存放不同的資料型別。你可以定義一個包含多個成員的聯集,但在任何特定時間內,只有一個成員可以存有值。聯集提供了一種有效利用相同記憶體位置來達成多重用途的方法。 +### [聯集](#聯集) + +「聯集 (Union)」是 C 語言中一種特殊的資料型別,允許在相同的記憶體位置存放不同的資料型別。你可以定義一個包含多個成員的聯集,但在任何特定時間內,只有一個成員可以存有值。聯集提供了一種有效利用相同記憶體位置來達成多重用途的方法。 #### 範例: @@ -315,9 +318,9 @@ union Data { --- -### [指標 (Pointer)](#pointer) +### [指標](#指標) -「指標」是一種變數,其值為另一個變數的位址,也就是記憶體的直接位置。像任何變數或常數一樣,必須先宣告指標,才能用來儲存任何變數的位址。指標變數宣告的一般形式為: +「指標 (Pointer)」是一種變數,其值為另一個變數的位址,也就是記憶體的直接位置。像任何變數或常數一樣,必須先宣告指標,才能用來儲存任何變數的位址。指標變數宣告的一般形式為: ```c type *var-name; @@ -331,9 +334,10 @@ int *ip; // ip 是一個指向整數的指標。 --- -### [函式 (Function)](#function) -「函式」是一組共同執行特定任務的敘述。每個 C 程式至少有一個函式,也就是 main(),而所有最簡單的程式都可以定義額外的函式。C 標準函式庫提供了許多內建函式,您的程式可以呼叫它們。 +### [函式](#函式) + +「函式 (Function)」是一組共同執行特定任務的敘述。每個 C 程式至少有一個函式,也就是 main(),而所有最簡單的程式都可以定義額外的函式。C 標準函式庫提供了許多內建函式,您的程式可以呼叫它們。 #### 範例: @@ -375,9 +379,10 @@ function functionName() { --- -### [類別 (Class)](#class) -「類別」是一種使用者定義的資料型別,包含其自身的資料成員和成員函式,透過建立該類別的實例即可存取和使用。類別就像是物件的藍圖。 +### [類別](#類別) + +「類別 (Class)」是一種使用者定義的資料型別,包含其自身的資料成員和成員函式,透過建立該類別的實例即可存取和使用。類別就像是物件的藍圖。 #### 範例: @@ -433,9 +438,10 @@ class Boat { --- -### [串列 (List)](#list) -「串列」被指定為有序物件的集合。列表類似於陣列,但列表的大小可以根據需要增長或縮小。列表也被稱為動態陣列。 +### [串列](#串列) + +「串列 (List)」被指定為有序物件的集合。列表類似於陣列,但列表的大小可以根據需要增長或縮小。列表也被稱為動態陣列。 #### 範例: @@ -447,9 +453,10 @@ x = [1, 2, 3] --- -### [映射/字典 (Map/Dictionary)](#mapdictionary) -「映射」是一種資料結構,用於快速存取元素。每個元素以鍵值對(key-value pair)的形式儲存。映射中不能包含重複的鍵,每個鍵最多只能對應一個值。 +### [映射/字典](#mapdictionary) + +「映射 (Map)」是一種資料結構,用於快速存取元素。每個元素以鍵值對(key-value pair)的形式儲存。映射中不能包含重複的鍵,每個鍵最多只能對應一個值。 #### 範例: @@ -468,9 +475,10 @@ map x = {{"name", "John"}, {"age", 30}}; --- -### [集合 (Set)](#set) -「集合」是指一組元素,其中沒有重複的元素。集合是無序的,這表示元素加入集合的順序並不重要。集合也被稱為無序列表。 +### [集合](#集合) + +「集合 (Set)」是指一組元素,其中沒有重複的元素。集合是無序的,這表示元素加入集合的順序並不重要。集合也被稱為無序列表。 #### 範例: @@ -489,9 +497,10 @@ set x = {"apple", "banana", "cherry"}; --- -### [配對/元組 (Pair/Tuple)](#pairtuple) -「配對」是一種容器,用來一起儲存兩個值。「元組」是一種容器,用來一起儲存固定數量的值。這些值可以是不同型別的。 +### [配對/元組](#配對/元組) + +「配對 (Pair)」是一種容器,用來一起儲存兩個值。「元組 (Tuple)」是一種容器,用來一起儲存固定數量的值。這些值可以是不同型別的。 #### 範例: @@ -512,15 +521,17 @@ tuple x = {"apple", "banana", "cherry"}; ## 資料型別轉換 -「資料型別轉換」是將資料從一種型別轉換為另一種型別。在大多數情況下,資料型別轉換是由編譯器自動完成的。然而,有時你需要手動執行資料型別轉換以獲得預期的結果。 + +「資料型別轉換 (Data type conversion)」是將資料從一種型別轉換為另一種型別。在大多數情況下,資料型別轉換是由編譯器自動完成的。然而,有時你需要手動執行資料型別轉換以獲得預期的結果。 ### 常見資料型別轉換 -- [隱性轉換 (Implicit Conversion)](#implicit-conversion) -- [顯性轉換 (Explicit Conversion)](#explicit-conversion) +- [隱性轉換](#隱性轉換) +- [顯性轉換](#顯性轉換) + +### [隱性轉換](#隱性轉換) -### [隱性轉換 (Implicit Conversion)](#implicit-conversion) +「隱性轉換(Implicit conversion)」是指資料從一種型別自動轉換為另一種型別。當編譯器偵測到需要進行轉換時,會自動執行此轉換。例如:當你將較小資料型別的值指派給較大資料型別的變數時,編譯器會自動將該值轉換為較大的資料型別。 -「隱性轉換」是指資料從一種型別自動轉換為另一種型別。當編譯器偵測到需要進行轉換時,會自動執行此轉換。例如:當你將較小資料型別的值指派給較大資料型別的變數時,編譯器會自動將該值轉換為較大的資料型別。 範例: ```c @@ -533,9 +544,12 @@ x = 10 # x 是整數 y = float(x) # y 是浮點數 ``` -### [顯性轉換 (Explicit Conversion)](#explicit-conversion) -「顯性轉換」是指由程式設計者主動將資料從一種型別轉換為另一種型別。這種轉換是使用型別轉換運算子來完成。例如:當你將一個較大資料型別的值指派給較小資料型別的變數時,編譯器不會自動將該值轉換為較小的資料型別。在這種情況下,你必須使用型別轉換運算子將該值轉換為較小的資料型別。 +### [顯性轉換](#顯性轉換) + +「顯性轉換 (Explicit conversion)」是指由程式設計者主動將資料從一種型別轉換為另一種型別。這種轉換是使用型別轉換運算子來完成。例如:當你將一個較大資料型別的值指派給較小資料型別的變數時,編譯器不會自動將該值轉換為較小的資料型別。在這種情況下,你必須使用型別轉換運算子將該值轉換為較小的資料型別。 + + 範例: ```c @@ -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 位元則用來表示數值本身。 在二補數表示法中,計算其可表示範圍的公式為: @@ -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 個位元都用來表示數值本身,這使得可表示的正數範圍比有號整數更大。 @@ -617,9 +634,10 @@ unsigned int unsignedValue = 42; 防止溢位錯誤:在某些情況下,使用無號整數有助於避免因數值過大而導致的溢位錯誤。當超過最大可表示值時,無號整數會回繞至零,降低錯誤風險。 -## 資料型別大小 (Data Type Size) -「資料型別大小」是指儲存某個特定資料型別的值所需的記憶體空間。資料型別的大小取決於編譯器與電腦架構,因此在不同的電腦之間可能會有所差異。 此外,資料型別的大小也可能因編譯器或作業系統的不同而有所變化。 +## 資料型別大小 + +「資料型別大小 (Data type size)」是指儲存某個特定資料型別的值所需的記憶體空間。資料型別的大小取決於編譯器與電腦架構,因此在不同的電腦之間可能會有所差異。 此外,資料型別的大小也可能因編譯器或作業系統的不同而有所變化。 ### 資料型別大小的比較(以 64 位元系統、x86-64 架構為基準)