1. 程式人生 > >C語言學習筆記之資料型別

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位元組長。