close

//本文章為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++ 的註解有兩種。

 

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 winage 的頭像
    winage

    winage的部落格

    winage 發表在 痞客邦 留言(0) 人氣()