Instructor:Po-Yu Kuo 教師:郭柏佑 EL 1009 計算機概論 (電子一B) Introduction to Computer Science Ch. 2 資料型別與變數宣告 Instructor:Po-Yu Kuo 教師:郭柏佑
位元、位元組和字組
2-1-1 Bit:位元 Bit:位元
2-1-2 Byte:位元組 Byte:位元組
2-1-3 Word:字組 Bit 雖然是電腦中最基本的資料單位, 不過資料量太少, 因此微處理器、MCU 基本上是以 Word (字組) 為進行處理時的基本單位 讓程式能適用於不同硬體規格 MCU、CPU (例如 Windows 程式可能要在 64 位元、32 位元、甚至 16 位元 CPU 上執行), 會明確定義程式中所用的 WORD 字組的大小
位元十進位、二進位與十六進位的換算與表示
2-2-1 十進位 十進位是『逢 10 進位』的數字系統, 十進位使用 0~9 來表示各種數字。
2-2-2 二進位 二進位就是逢 2 進位, 並只用到 0 和 1 來表示各種數字。
2-2-2 二進位
2-2-2 二進位
2-2-2 二進位
2-2-3 十六進位的換算與表示
2-2-3 十六進位的換算與表示
2-2-3 十六進位的換算與表示
嵌入式系統常用的資料型別
2-3-1 資料型別的分類與長度 2-3-2 整數型別的修飾字
2-3-1 資料型別的分類與長度 C 語言的資料型別分成 4 種: 1. char (字元) 。 2. int (整數) 。 2-3-1 資料型別的分類與長度 C 語言的資料型別分成 4 種: 1. char (字元) 。 2. int (整數) 。 3. float (浮點數) 。 4. double (倍精數) 。
2-3-1 資料型別的分類與長度 char : 字元 (character) 資料型別, 可用來存放 'a'、'b'、'!' 等字元或符號。 2-3-1 資料型別的分類與長度 char : 字元 (character) 資料型別, 可用來存放 'a'、'b'、'!' 等字元或符號。 雖然char型別為字元, 但其實 char 仍算是一個存放整數的資料型別。 char長度為 1 byte, 剛好足夠存放代表字元的 ASCII 碼 。 若以整數來看, 其數值的範圍是 -128~127 (-27~27-1)。
2-3-1 資料型別的分類與長度 int : 整數 (integer) 資料型別, 如 1、2、-3。 2-3-1 資料型別的分類與長度 int : 整數 (integer) 資料型別, 如 1、2、-3。 長度為 4 bytes (也就是 32 位元), 範圍是 -2147483648 與 2147483647 間的整數 (-231~231-1) 。 float : 浮點數 (floating point) 資料型別, 如 1.1、2.22。 長度為 4 bytes, 範圍為 1.2e-38 與 3.4e38 間的浮點數。
2-3-1 資料型別的分類與長度 double : 倍精數 (double precision floating point) 資料型別, 也是用來存放浮點數型別, 但是小數的位數比 float 多, 因此精確度更高。 長度為 8 bytes, 範圍為 2.2e-308 與 1.8e308 間的浮點數。 long:『長』整數, 早期個人電腦及目前許多嵌入式環境, int 的大小可能只有 2 個位元組, 因此要確保使用 4 位元的整數, 就要用 long。
2-3-1 資料型別的分類與長度 我們可以用 sizeof () 算符得到資料型別的長度。 2-3-1 資料型別的分類與長度 我們可以用 sizeof () 算符得到資料型別的長度。 括號內放入資料型別的名稱, 就可以得到該型別的長度。 1 byte 4 bytes 4 bytes 8 bytes
2-3-2 整數型別的修飾字 除了 4 種基本型別外, 宣告整數型別的變數時, 可以加上修飾字, 來改變整數資料的範圍與長度。 2-3-2 整數型別的修飾字 除了 4 種基本型別外, 宣告整數型別的變數時, 可以加上修飾字, 來改變整數資料的範圍與長度。 修飾字有 3 種, 分別如下: 1. short 。 2. long 。 3. unsigned 。
2-3-2 整數型別的修飾字 short : short int 將整數資料型別 (int) 的長度改成 16 位元的長度 (2 bytes)。 現今的編譯器大都屬於 32 位元, 如果宣告時沒有加修飾詞, 編譯器會自動以 32 位元的方式來處理 int (4 bytes) 。
2-3-2 整數型別的修飾字 long : long int 就是把 int 型別的長度設定為 32 位元 (4 bytes)。 2-3-2 整數型別的修飾字 long : long int 就是把 int 型別的長度設定為 32 位元 (4 bytes)。 unsigned : unsigned 不會改變資料長度, 可是會更改 C 語言對整數資料的詮釋方式。 以 int 為例, 原本 int 的資料範圍是 -2147483648~2147483647; 但 unsigned int 的資料範圍則變成 0~4294967295, 不過其長度仍維持 4 個 byte 。
2-3-2 整數型別的修飾字 使用修飾詞時, 要將修飾詞加在整數型別前。
2-3-2 整數型別的修飾字
變數名稱與保留字
2-4-1 變數的命名 變數名稱可以為任何英文字母或數字, 而且字母與數字可以混合使用, 但是不可單使用數字, 或者用數字當變數的第一個字元;也不可使用字母或數字以外的文字
2-4-1 變數的命名 其他符號除了底線 “_” 之外都不能用。 底線 “_” 可以為第一個字元。 在 C 語言中, 英文大小寫是有分別的。 AA 不等於 aa 。
2-4-1 變數的命名
2-4-1 變數的命名 不可以使用保留字 (Keyword) 作為變數名稱。 保留字對編譯器而言, 有其特定的涵義。
2-4-1 變數的命名 取變數名稱請依照以上四點原則, 並儘量取有意義的名字, 讓程式更容易被理解
2-4-2 宣告變數 變數的宣告語法
2-4-2 宣告變數 變數應宣告為何種型別, 完全視您要用該變數存放何種資料而定。 例如我們想要宣告一個叫做 value 的變數時, 可如下宣告:
2-4-2 宣告變數 如果有很多同型別的變數需要宣告時, 可以宣告在同一行, 每個變數名稱中間用逗點隔開, 最後以分號結尾。 或者也可以一個變數寫一行。
2-4-2 宣告變數 不同型別的變數
2-4-2 宣告變數 變數的宣告, 需固定放在以下兩個位置: 1.放在函式大括號內的最上面。 2.放在一個程式的含括檔底下以及所有函式上方。 1. 放在函式大括號內的最上面 請注意, 一定要所有的變數都宣告完後, 才可以繼續寫下面的程式碼。 否則在編譯時會產生 錯誤。
2-4-2 宣告變數
2-4-2 宣告變數 第5~7行宣告了不同的變數型別。 第 10 行中,使用了 2 個輸出格式控制符號 (%f 和 %e), 並在逗號後面指定 2 個要輸出的變數 variable2、variable2。
2-4-2 宣告變數 第 1 個 %f (以浮點數格式輸出) 對應的是逗號後的第 1 個 variable2 。 第 2 個 %e (以指數方式表示浮點數) 則對應第 2 個 variable2 。
2-4-2 宣告變數 2.放在一個程式的含括檔底下以及所有函式上方 此方式宣告的變數稱為外部變數。
2-4-3 變數的值 設定初始值
2-4-3 變數的值 設定初始值
2-4-3 變數的值 浮點數變數的設定方式也相同 要設定字元變數的初值, 則需將該字元初值放在單引號 (') 中
2-4-3 變數的值
2-4-3 變數的值
使用常數
2-5-1 字面常數 (Literal Constant) 整數:不含小數點的數 浮點數:含小數點的數 字元:由單引號括住的字母或符號
2-5-2 定義常數 (Symbolic Constant) 常數名稱:可為任何字母的組合, 但為了區別於變數名稱, 大多以大寫字母命名 常數值:即為前述之字面常數
2-5-2 定義常數 (Symbolic Constant)
2-5-2 定義常數 (Symbolic Constant) 定義常數的值, 一旦經過定義完成後, 便無法更改其值
2-5-3 使用 const 修飾詞定義常數Constant) 資料型別:可為前述面介紹過的任何一種資料型別 變數名稱:在此仍稱為變數名稱而不稱常數名稱, 是因為此種常數定義方式是宣告變數時加上 const 修飾的結果, 用以區別 #define 方式一開始便宣告成常數的方式。 初始值:定義 const 時, 一定要指定初始值, 其值到程式結束均不可改變。
2-5-3 使用 const 修飾詞定義常數Constant)
嵌入式系統的溢位錯誤
變數型別的轉換
整數轉成浮點數 在程式執行過程中, 變數值的改變是必然的。 比如說, 一開始宣告變數的型別是整數, 但做除法運算時可能商會有小數部分。 在這種情況下, 我們必須用浮點數型別來代替原來的整數型別, 才能正確的計算出小數部分。
2-7-1 整數轉成浮點數 此時就需做變數的型別轉換, 轉換的語法如下: 2-7-1 整數轉成浮點數 此時就需做變數的型別轉換, 轉換的語法如下: 假設我們要把整數型別轉成浮點數型別,只需在新型別處寫上 (float) 而變數名稱不變即可。
2-7-1 整數轉成浮點數
2-7-1 整數轉成浮點數 第 9 行的 intnum1、intnum2 兩個變數都是整數型別。 2-7-1 整數轉成浮點數 第 9 行的 intnum1、intnum2 兩個變數都是整數型別。 相除後所得到的商只有整數部分, 小數點部分全部忽略。
2-7-1 整數轉成浮點數 第 12 行的 (float) intnum1 由 int 型別轉換成 float 型別後, 再被整數型別的 intnum2 除。 也就是說, 變成了浮點數被整數除。 如此一來, 所得到的商就會有小數部分。 第 12 行的算式, 不可以改成 (float) (intnum1/intnum2)。 因為, 此算式會先做整數型別的變數相除, 結果只保留了整數部分的商, 小數點部分全被截斷。
2-7-2 浮點數轉成整數 如果將浮點數型別強制轉換成整數, 則程式會將小數點後的所有位數直接捨去 (不會作四捨五入的運算), 只會留下整數部分。
浮點數轉成整數 如果 f 以原來 float 的資料型別所得到的結果(3/2)是 1.5。 在第 7 行處輸出變數 f 時已先將它轉成整數型別 “ (int) f ”,因此輸出時會捨去小數點後的位數。 所以執行結果等於 1 。
2-7-3 數字和字元間的轉換:字元轉數字 char 型別的變數, 是 1 個 byte 的整數, 換言之, 變數中所存放的是該字元或符號的 ASCII 碼。 利用轉型的方法, 可以將字元變數, 轉成數字型別輸出 (也就是輸出其 ASCII 碼) 。
數字和字元間的轉換:字元轉數字
數字和字元間的轉換:字元轉數字 接著我們利用相同的技巧, 將整數變數轉成字元型別。
大寫字母轉成小寫字母
大寫字母轉成小寫字母 第 8 行中將 upper_case 變數值加上 32, 也就是前述大小寫字母 ASCII 碼的差值。 若變數存放的是小寫的英文字母, 只要減去 32 即可將它轉換成大寫的字母。
Homework#3 1. 學習評量 Ch1. (2), (3), (6)。 Ch2. (6), (7)。 繳交期限: 2016/11/3 。