//本文章為C/C++程式設計研習班課後心得摘要
C/C++提供下表的5種基礎的資料型態
保留字 | 佔用記憶體 | 數值範圍 | |
整數 | int | 4 bytes | -2,147,483,648 ~ 2,147,483,64 |
字元 | char | 1 byte | -128~127 |
浮點數 | float | 4 bytes | ±3.4×10-38 ~ ±3.4×1038 (小數點下有效位數約 7位) |
倍精確度浮點數 | double | 4 bytes | ±1.7×10-308 ~ ±1.7×10308 (小數點下有效位數 15位) |
布林數 | bool | 8 bytes | true 或 false |
在這些資料型態當中除了字元、浮點數、布林數固定是這些長度以外,整數可以透過 short 和 long 修飾詞來改變它的儲存長度,除此之外,還可以藉由 unsigned 修飾詞來指定要把所有的 bytes 都用來儲存正整數。
宣告方法 | 記憶體 | 數值範圍 | |
普通整數 | int | 4 bytes | -2,147,483,648 ~ 2,147,483,647 |
短整數 | short | 2 bytes | -32,768 ~ 32767 |
正短整數(word) | unsigned short int | 2 bytes | 0 ~ 65,535 |
正整數(dword) |
unsigned int | 4 bytes | 0 ~ 4,294,967,295 |
long 修飾詞是舊時代的產物,其實在很多年以前,C/C++ 語言中的 int 是 2 bytes的,那時候並沒有 short int 這種東西,反而有 long int 來將 int 由 2 bytes 擴充到 4 bytes,至少在現在 Win32 的 C/C++ 編譯器之下,int 都是 4 bytes,而 long int 和 int 則是完全相等的,換句話說 long 修飾詞等於是完全沒有效果。
unsigned 修飾詞雖然不改變變數所佔的記憶體空間,但卻改變它的儲存方式,使得數值範圍向正數移動,其中 2 bytes 的正短整數(unsigned short int)又被稱作一個 word,而 4 bytes 的正整數(unsigned int)又被稱作是一個 double word。
char 原本的數值範圍是 -128~127 也可以藉由 unsigned 改變為 0~255。
理所當然地,short, long, 以及 unsigned 也是 C/C++ 語言的保留字
const 和 static 可使用,這兩個保留字不改變變數的長度也不改變數值範圍,而是限制它們在程式中被使用的方式。
宣告變數前加上 const 可以令它成為常數(constant),如
const unsigned int a = 100;
之後的程式碼裡如果寫 a = 50; 會出現編譯錯誤 ,因為常數是不允許重新賦予數值的。
宣告變數
型別 變數名稱; 或 型別 變數名稱 = 初始值;
- 變數名稱是區分大小寫的,例如 int b = 1; 和 int B = 1; 會被視為兩個不同的變數
- 數值如果沒有小數點就會被當成整數,所以如果要指定數值 1 給浮點數變數,應該要寫成 1.0f,否則編譯器會以為是一個整數1要轉換成浮點數格式。浮點數的數值必有小數點,而0.1f 與 0.1 前者會被編譯器當成單精確度浮點數值(float),因為數字尾端有個 f。
- sizeof( ) 可以用來取得型別在記憶體中所佔的 bytes,例如 int a = sizeof(float); 則 a 的值為 4。主要的用途在於計算配置記憶體所需的空間,例如, 配置一段容納 100 個正短整數記憶體空間,所需的記憶體就是 sizeof (unsigned short int) * 100 bytes。
C++註解
C/C++中的註解有兩種,一種是單行註解,一種是區段註解:
單行註解: // … 到行尾
例如: int a = 1; // 把 a 設為 1
區段註解: /* …註解內容(可以多行) */
例如: int a = 1; /* 把 a 設為 1 */
型別轉換(casting)
不同型別的變數間賦值就必須做型別轉換(casting)的動作,也就是轉換儲存格式、擴充或截斷(truncate)精確度的行為,差別只是隱性型別轉換(編譯器自動做)與顯性型別轉換(程式碼中指定)
隱性型別轉換
當述句的等號(=)兩邊的變數型別(儲存格式)、編譯器判斷是它能夠處理的轉換的時候,它就會進行隱性型別轉換,遇到無法轉換的述句,就會回報編譯錯誤,而有些可以轉換但是會造成資料流失的狀況,則會回報一些警告訊息:
適用: 由精確度較低到精確度較高的型別,例如短整數賦值給長整數,或是整數賦值給浮點數。
產生警告: 由精確度較高到精確度較低的型別,例如浮點數賦值給整數,會流失小數點以下的資料。
沒有警告,但資料流失: 右邊的數值範圍超過左邊,例如長整數賦值給短整數。
顯性型別轉換
而顯性型別轉換就是不管編譯器的判斷,也稱為強制型別轉換,以程式碼要求、不顧資料儲存格式差異與資料流失也要進行的轉換,方法是在等號(=)的右邊以 (型別) 註明欲轉換的型別
C/C++ 語言的四則運算式除了寫成上述的數學式子以外,還有些更簡短的寫法,如下表:
運算子 | 範例 | 等同效果 |
+= | a += b; | a = a + b; |
-= | a -= b; | a = a - b; |
*= | a *= b; | a = a * b; |
/= | a /= b; | a = a / b; |
++ | ++i; 或 i++; | i = i + 1; |
-- | --i; 或 i--; | i = i - 1; |
採用這一套寫法,編譯器可以編譯成更有效率的機械碼,所以請盡量地使用。以 ++i; 為例,CPU 的指令集當中本來就有累加(increase)的機械碼,所以寫成 ++i; 當然比寫成 i=i+1; 有效率的多。
重點整理
- C / C++ 語言有五種基本資料型態,每個佔1~8 bytes。
- 修飾詞可以改變整數所佔的記憶體長度與數值範圍。
- C / C++ 有加減乘除四則運算,負號和等號,跨弧。
- 運算述句以 ; 號結尾,把右邊的結果儲存到左邊的變數。
- C / C++ 的述句是會區分大小寫的。
- C / C++ 的註解有兩種。
留言列表