本章將重點介紹c語言提供的三組基本資料型別的使用,包括:整型、字元型和浮點型。c語言的其他高階資料型別實質上都可以視為這些基本資料型別的組合。通過本章的學習,要掌握以下知識:
c語言定義了4種整型資料型別以表示不同大小的整數數值。
本節將介紹各種整型資料型別的位元組長度、整型常量和整型變數的使用,以及使用整型型別的儲存方式和範圍。
在不同的編譯器和不同的硬體環境中,整型資料型別的位元組長度可能不同,但是都具有以下關係:short int 型的長度不大於 int 型的長度,int 型的長度不大於 long int 型的長度,long int 型的長度不大於 long long int 型的長度。
【範例4-1】 輸出各整型的位元組長度,實現方法如示例**4-1所示。
示例**4-1
#include int main(void)
【**解析】程式中是用來位元組操作符sizeof,其使用方式為:sizeof(資料型別)sizeof 的作用是得到資料型別所佔空間,以位元組為單位。括號中也可以是變數、常量或其他表示式。
c語言中,signed 和unsigned 稱為符號修飾符,可以用來作為上面四種整型資料型別的字首,以組成有符號整數和無符號整數。帶signed 字首的資料型別和沒有符號修飾的整型一樣,都可以表示所有的整數;而帶unsigned 修飾的資料型別都只能用來表示無符號數,即非負整數。
符號修飾符不會改變資料型別的位元組長度,所以signed 和unsigned 型所能表示的整數個數是一樣的,但是它們表示的整數範圍是不同的。
整型常量是指用以表示整型數值的常量,有四種。每種分為有符號型和無符號型。
整型變數是指用以儲存整型數值的變數,有四種。每種分為有符號型和無符號型。
整型按照儲存方式和數值區間的不同,可分為兩大類:有符號整型和無符號整型。有符號整型在記憶體中的儲存分為兩部分:符號部分和數值部分。
符號部分佔1位。0為非負數,1為負數。其餘部分都屬於數值部分,整數變數的數值以二進位制的形式存放在該部分中。而無符號整型的儲存方式相對簡單,只有數值部分。
不同整型資料的位元組長度不同,因此,它們可表示的數值範圍也是不同的。
c語言中的字元型資料只有一種,即 char 型資料型別。使用符號修飾符還可以得到無符號字元型和有符號字元型。
在c語言標準中,char 型的位元組長度被定義為1,即8位。
字元常量,即用以表示字元的常量。c語言中的字元常量都包含在單引號中,單引號內具體的內容可以分為兩種。
單個字元:單個字元常量是指單引號內只含乙個字元的常量。
轉義字元:以反斜槓(\)開頭的轉義字元,其作用是把反斜槓後面的字元轉換為特定形式。
字元變數是用於儲存字元型數值的變數。字元型變數也有兩種:有符號型和無符號型。對字元型變數有兩種賦值方式。一種是字元常量,另一種是整型數值賦值,整型數值會自動轉化為相應的ascii碼賦值給字元變數。
(此處易忽略)比如: char c1 = 97; 此處97為ascii值,對應的控制字元為『a』
【範例4-7】展示字元型變數的使用,實現方法如示例**4-7所示。
示例**4-7
#include #include//為了解決vs2013閃退加的
int main(void)
【執行結果】程式執行後,得到結果如圖4-10所示。
圖4-10 字元型變數的使用
【**解析】轉義字元『\n』的作用是換行,第乙個printf函式裡的 %c 處會替換為 『\n』,輸出到終端上則會替換為換行;%d則為 c1 的 ascii 碼值代替。轉義字元 『\t』 的作用為水平製表,第二個 printf 裡的%c 會替代 『t』, 輸出到終端上,則替代為水平製表(即跳到下乙個tab位置),%d 同樣被 c2 的 ascii 值代替。數值 49 對應的 ascii 碼為』1』,第三個 printf 裡的%c 將替代為『1』,%d 將替代為整數49。
字元型資料型別的儲存方式和整型十分相似。
c語言共定義了三種浮點型資料型別來表示不同精度和不同數值範圍的浮點數。
本節先討論位元組長度,再討論浮點型常量和變數的使用,最後討論各個浮點型資料型別的精度、數值範圍和儲存方式。
規定:float 型不大於 double 型,double 型不大於 long double 型。在不同編譯器和不同硬體環境下,各型別的位元組長度有所變化。visual c++ 2005 環境下,float 型字長為 4 位元組,即 32 位;double 型和 long double 型字長為 8 位元組,即 64 位。
浮點型常量是用以表示浮點數值的常量。c語言中的浮點型數值預設為雙精度型別,可以使用 f 或 f 作為字尾得到單精度型常量,或使用 l 或 l 作為字尾得到長雙精度常量。它們的表示有小數和指數兩種形式。
浮點型變數是用以儲存浮點型數值的變數。三種浮點型變數定義變數的形式:
printf 函式與 scanf 函式處理浮點型資料的格式如下表所示:
資料型別
位元組長度
精度數量級範圍(10的次方)
printf 和 scanf 格式
float(f)47
-38 ~ 38
%fdouble
8約16
-308 ~ 308
%flong double(l)
12約19
-4932 ~ 4932
%llf
不同浮點型的精度不同,精度從低到高依次為 float 型、double 型和 long double 型。精度是指精確到小數點後的位數,位數越多,精度越高。
不同浮點型可表示的數值範圍也不同,由於浮點型在記憶體中是以科學計數法的方式來儲存的,其數值範圍只能使用數量級範圍來表示。可表示的數量級範圍從小到大依次為 float 型、double 型和 long double 型。
以 linux 下的 gcc 3.2.2 的實現為例,討論浮點型的儲存方式。
1.符號位:浮點型的符號位只有一位,為其最高位。如果該位為1,則表示其為負數;如果該位為0,則表示其為非負數。
2.指數字:浮點型的指數為以補碼形式儲存,其科學計數法表示形式的指數部分。指數字決定浮點型可儲存的數值範圍。但,真正的指數值為該型別的偏差值減去該儲存值的結果。每種型別的偏差值是固定的。
3.基數字:基數字是浮點型的最後一部分,其位數決定了精度。
除了c語言自帶的資料型別外,程式設計師還可以使用關鍵字 typedef 定義資料型別。
標準形式: /*typedef 原資料型別 新資料型別 */
如:typedef char mychar;
使用 typedef 可以簡化複雜的型別宣告;提高程式的可維護性和可移植性;自定義資料型別集。
它們是兩個資料型別限定詞,均在變數定義中使用。使用 const 的形式如下:
const 資料型別名 變數名 = 初始值;
或者:資料型別名 const 變數名 = 初始值;
使用 const 變數有以下好處:提高程式的可讀性;提高程式的可維護性;避免唯讀變數被意外修改;提高程式效率。
使用 volatile 告訴編譯器其修飾的變數是隨時可能變化的,編譯器優化時必須每次都重新讀取這個變數的值,而不是使用儲存在暫存器裡的備份。volatile 無須初始化,標準使用形式為:volatile 資料型別名 變數名;
或:資料型別名 volatile 變數名;
volatile 限定詞的主要目的是提示編譯器,每次讀取器資料時,都會老老實實地從記憶體中讀取,不會對其優化,在多執行緒環境下經常使用 volatile 變數。
21天學通C語言 學習筆記(7)
為了處理更複雜的資料,c語言還定義了一些功能更強大的復合資料型別,如陣列型別 結構體型別 共用體型別和列舉型別。陣列是同一資料型別的許多資料元素按某種順序排列在一起的集合,通過訪問陣列名和索引就可以訪問陣列中的任意元素。本節將重點學習一下內容 一維陣列是c語言中用來儲存和處理一維序列資料的資料型別。...
21天學通C 閱讀筆記3
陣列 陣列是資料存放位址的集合,每個位址儲存相同型別的資料。int intarray 10 int 型別為4 個位元組,編譯器會分配 4 10 個位元組的連續記憶體給該陣列 陣列初始化 int intarray 2 一維陣列宣告 int intarray 2 對兩個元素都賦值 int intarra...
C語言學習筆記 21結構體
1 通過函式完成對結構體變數的輸入和輸出 通過函式完成對結構體變數的輸入和輸出 include include include 定義乙個結構體型別 struct student void inputstudent struct student p void outputstudent struct ...