C語言學習筆記之資料型別
1、整數型別
1.1 型別
型別 | 位數 |
---|---|
short(或short int) | 16位 |
int | 16位或32位 |
long (或long int) | 32位 |
long long(或long long int) | 64位 |
注意:
(1)如果在long型別等於int型別的系統中編寫程式碼,當確實需要32位整數是,應使用long型別,以便使程式移植到int型別為16位的機器上後仍然可以正常工作。
(2)通常,數字常量以int型別儲存,如果使用1000000這樣的數字int型別不能表示時,編譯器會視其為long int型別,如果仍然不夠,會視其為long long int型別。
(3)如果希望把一個數字常量作為long型別對待,可以使用‘l’或‘L’字尾。使用’L’字尾是更好的選擇,因為‘l’與數字1很相近。
(4)與之類似,可以使用‘ll’或者‘LL’字尾標識long long型別。
1.2 數制
數制 | 表示方法 |
---|---|
八進位制 | 字首‘0’ |
十進位制 | 無字首 |
十六進位制 | 字首‘0x’或者‘0X’ |
這種使用不同數制系統的選擇是為了方便而提供的,它並不影響數字的儲存。無論16、020、0x10,計算機內部都是使用二進位制編碼進行儲存。
2、字元型別
表示方法 | 例子 |
---|---|
單引號 | char ch = ‘A’; |
ASCII碼 | char ch = 65; |
轉義序列 | char ch = ‘\n’; |
反斜槓 +數字 | char ch = ‘\020’; |
注意:
(1)上述‘反斜槓 +數字’表示方法中,數字為八進位制或者十六進位制,如果沒有用‘x’字首,則為八進位制,
char ch1 = '\020';
char ch2 = '\20';
char ch3 = '\x10';
所以上述三個例子效果相同。
(2)C語言將字元常量視為int型別儲存。
char grade = 65; \*對於ASCII,這是可以的;但這是一種不好的程式設計風格*\
char grade2 = 'A'; \*與上一條有類似的效果*\
char grade = 'FATE';
printf("%c", grade); //將打印出‘E’,因為C將這四個獨立的8位
//ASCII碼儲存在一個32位的單元中。所以如果
//把這個字元常量賦給一個char變數,那麼只有
//最後8位會起作用。
(3)如果再轉義序列和其對應的ASCII碼之間做出選擇,應該使用轉義序列,因為轉義字元更容易記憶,而且移植性更好。
(4)當需要使用數值編碼時,使用‘\032’而不是032。首先,‘\032’能更清晰的表達程式設計師表示一個字元編碼的意圖;其次,‘\032’這樣的轉義序列可以嵌入到C字串中,比如字串“hello!\007\n”中就嵌入了‘\007’。
3、浮點數型別
3.1 浮點型別
float:系統的基本浮點型別。至少能精確表示6位有效數字。
double:範圍(可能)更大的浮點型別。能表示比float型別更多的有效數字以及更大的指數。
long double:範圍(可能)更大的浮點型別。能表示比double型別更多的有效數字以及更大的指數。
3.2 表示方法
float a = -1.34E-12; //e或者E表示10的指數
float b = 2.23e21;
float c = 0xa.1fp10; //p或者P表示2的指數(十六進位制表示法)
4、複數和虛數型別(用的不多,省略)
注意:
char型別肯定是1位元組,因為C把char型別的長度定義為1個位元組。所以在char型別長為16位,double型別長為64位的系統中,sizeof將報告double型別有4位元組長。