




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、第第3 3章章 數據類型、運算符、數據類型、運算符、表達式、順序結構表達式、順序結構第第3章章 數據類型、運算符、表達式、數據類型、運算符、表達式、順序結構順序結構3.1 一個簡單程序的例子一個簡單程序的例子3.2 數據類型數據類型3.3 標識符、常量與變量、宏定義標識符、常量與變量、宏定義3.4 整數類型整數類型3.5 浮點數類型浮點數類型3.6 字符類型字符類型3.7 變量定義及初始化變量定義及初始化3.8 各類數值型數據間的混合運算各類數值型數據間的混合運算第第3章章 數據類型、運算符、表達式、數據類型、運算符、表達式、順序結構順序結構3.9 算術運算符及其表達式算術運算符及其表達式3.
2、10 賦值運算符及其表達式賦值運算符及其表達式3.11 順序運算符及其表達式順序運算符及其表達式3.12 位運算符及其表達式位運算符及其表達式3.13 語句概述語句概述3.14 輸入、輸出輸入、輸出3.15 程序的錯誤類型程序的錯誤類型3.16 調試與測試調試與測試 第第3章章 數據類型、運算符、表達式、數據類型、運算符、表達式、順序結構順序結構3.1 一個簡單程序的例子一個簡單程序的例子3.2 數據類型數據類型3.3 標識符、常量與變量、宏定義標識符、常量與變量、宏定義3.4 整數類型整數類型3.5 浮點數類型浮點數類型3.6 字符類型字符類型3.7 變量定義及初始化變量定義及初始化3.8
3、各類數值型數據間的混合運算各類數值型數據間的混合運算一個一個簡單程序的例子簡單程序的例子華氏溫度華氏溫度 攝氏溫度攝氏溫度算法:算法: 1.1.輸入一個華氏溫度輸入一個華氏溫度f f 2.2.轉換計算轉換計算: : c - (f-32)c - (f-32)* * 5/9 5/9 3. 3.輸出攝氏溫度輸出攝氏溫度c c一個一個簡單程序的例子簡單程序的例子#include int main( ) double f, c; scanf(%lf,&f); c = (f-32)*5/9; printf(f=%f, c=%fn,f,c); return 0;輸入轉換計算輸出程序運行時,輸入的程序
4、運行時,輸入的120放到變量放到變量f中中計算的結果計算的結果48.888889放到變量放到變量c中中第第3章章 數據類型、運算符、表達式、數據類型、運算符、表達式、順序結構順序結構3.1 一個簡單程序的例子一個簡單程序的例子3.2 數據類型數據類型3.3 標識符、常量與變量、宏定義標識符、常量與變量、宏定義3.4 整數類型整數類型3.5 浮點數類型浮點數類型3.6 字符類型字符類型3.7 變量定義及初始化變量定義及初始化3.8 各類數值型數據間的混合運算各類數值型數據間的混合運算數據類型數據類型 程序程序 = 數據數據 + 代碼代碼 所有數據都具有確定的數據類型所有數據都具有確定的數據類型
5、(data type) C 語言是靜態(tài)類型語言語言是靜態(tài)類型語言數據類型數據類型 數據數據 類型類型基本類型基本類型整數類型整數類型char char int int shortshortlonglongunsigned charunsigned charunsigned shortunsigned shortunsigned intunsigned intunsigned longunsigned longlong long long long 實數類型實數類型floatfloatdoubledoublelong double算術類型算術類型枚舉類型枚舉類型指針類型指針類型無值類型無值類型v
6、oidvoid構造類型構造類型數組類型數組類型結構類型結構類型聯合類型聯合類型數據類型數據類型數據類型決定:數據類型決定:存儲空間的大小、數據值的表示范圍存儲空間的大小、數據值的表示范圍允許的操作種類允許的操作種類 常量、變量、表達式、函數等都有確定常量、變量、表達式、函數等都有確定的數據類型。一旦確定,就不會改變。的數據類型。一旦確定,就不會改變。數據類型數據類型 數據存放在存儲器中,存儲器以字節(jié)為數據存放在存儲器中,存儲器以字節(jié)為最小存儲單元,一個字節(jié)最小存儲單元,一個字節(jié)( (bytebyte) )由由8 8個二個二進制位進制位( (bitbit) )組成。數據按其所需的存儲組成。數據按
7、其所需的存儲單元和組織形式不同,分成不同數據類單元和組織形式不同,分成不同數據類型。型。 二進制的知識二進制的知識第第3章章 數據類型、運算符、表達式、數據類型、運算符、表達式、順序結構順序結構3.1 一個簡單程序的例子一個簡單程序的例子3.2 數據類型數據類型3.3 標識符、常量與變量、宏定義標識符、常量與變量、宏定義3.4 整數類型整數類型3.5 浮點數類型浮點數類型3.6 字符類型字符類型3.7 變量定義及初始化變量定義及初始化3.8 各類數值型數據間的混合運算各類數值型數據間的混合運算標識符、常量與變量、宏標識符、常量與變量、宏C語言的字符集語言的字符集 a b c d e f g h
8、 I j k l m a b c d e f g h I j k l m n o p q r s t u v w x y z n o p q r s t u v w x y z A B C D E F G H I J K L M A B C D E F G H I J K L M N O P Q R S T U V W X Y Z N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 !” # % & # % & ( ) ( )* * + + ,- . / :- . / : ; ? _ | ; ? _
9、 | 共共9191個字符個字符 另外另外, ,字符串中還允許出現中文字符。字符串中還允許出現中文字符。標識符、常量與變量、宏標識符、常量與變量、宏標識符標識符 用來標識變量名、符號常量名、數組名、函數用來標識變量名、符號常量名、數組名、函數名、文件名等的字符序列稱為名、文件名等的字符序列稱為標識符標識符。 標識符由標識符由字母字母、數字數字和和下劃線下劃線組成,且由字母組成,且由字母和下劃線開頭。和下劃線開頭。 例如:例如:namename、s01s01、_total_total、_123_123等都是合法等都是合法的標識符,而的標識符,而12acd12acd、R.RebinR.Rebin、$
10、12.5$12.5等都是等都是不合法的。另外組成標識符的大寫字母與小寫不合法的。另外組成標識符的大寫字母與小寫字母是不同的。字母是不同的。 例如:例如:_ABC_ABC與與_abc_abc是兩個不同的標識符。是兩個不同的標識符。標識符、常量與變量、宏標識符、常量與變量、宏標識符命名標識符命名 命名要命名要“見名知意見名知意”,通過變量名就知道變量,通過變量名就知道變量的含義。這樣可提高程序的可讀性。通常應選的含義。這樣可提高程序的可讀性。通常應選擇能表示數據含義的英文單詞(或縮寫)作變擇能表示數據含義的英文單詞(或縮寫)作變量名。量名。 例如例如: name(姓名)、(姓名)、gender(性
11、別)、(性別)、 age (年齡)、(年齡)、salary(工資)。(工資)。標識符、常量與變量、宏標識符、常量與變量、宏 標識符分為兩類:標識符分為兩類: 1. 1. 用戶自定義標識符用戶自定義標識符 2. 2. 系統(tǒng)定義的標識符系統(tǒng)定義的標識符( (稱為關鍵字或保留字稱為關鍵字或保留字) ) 用戶自定義標識符不能與關鍵字相同。用戶自定義標識符不能與關鍵字相同。 標識符、常量與變量、宏標識符、常量與變量、宏 關鍵字關鍵字 C C語言定義了一些具有特定意義的單詞作語言定義了一些具有特定意義的單詞作關鍵字關鍵字( (又叫又叫保留字保留字) )。對于關鍵字,用戶只能嚴格按。對于關鍵字,用戶只能嚴格
12、按規(guī)定使用而不能作為它用。所有關鍵字都用小規(guī)定使用而不能作為它用。所有關鍵字都用小寫,且必須嚴格按定義拼寫。寫,且必須嚴格按定義拼寫。C C語言的關鍵字較語言的關鍵字較少,只有少,只有3030多個。多個。標識符、常量與變量、宏標識符、常量與變量、宏 關鍵字關鍵字(p378)(p378) auto break case char constcontinue default do double elseenum extern float for gotoif int long register return short signed sizeof static structswitch typed
13、ef union unsigned void volatile while 等等重要提示重要提示 使用標識符時,不要忘了大小寫字使用標識符時,不要忘了大小寫字母之間的區(qū)別!母之間的區(qū)別!#include int main() double celsius, fahr; scanf(%lf,&fahr); celsius = 5 * (fahr - 32) / 9; printf(fahr = %f, celsius = %fn, fahr, celsius); return 0;標識符、常量與變量、宏標識符、常量與變量、宏定義定義變量變量fahr和和celsius為為double型型輸
14、入數據存放到變量輸入數據存放到變量fahr計算計算celsius的值的值輸出輸出fahr和和celsius的的值值標識符、常量與變量、宏標識符、常量與變量、宏 程序程序=數據數據+代碼代碼 數據數據是計算機程序處理加工的對象。是計算機程序處理加工的對象。double celsius, fahr; fahr = 100.0;celsius = 5 * (fahr - 32) / 9; 在計算機高級語言中,數據有兩種表現形式:在計算機高級語言中,數據有兩種表現形式: 常量:在程序運行過程中,其值不能被改變。常量:在程序運行過程中,其值不能被改變。 例如,例如,100.0,5,32,9 變量:在程序
15、運行過程中,其值可以被改變。變量:在程序運行過程中,其值可以被改變。 如:如:double celsius,fahr; fahr=123.5;標識符、常量與變量、宏標識符、常量與變量、宏 變量:變量:變量代表一個命名的存儲單元,具有存儲數據的能變量代表一個命名的存儲單元,具有存儲數據的能力。力。 變量名變量名: 用標識符表示用標識符表示 變量值變量值: 是數值是數值,存儲單元中的內容,在機器內部用二存儲單元中的內容,在機器內部用二進制表示進制表示 存儲單元:由變量的數據類型和在內存中的位置確定存儲單元:由變量的數據類型和在內存中的位置確定 在程序運行過程中,變量的值是可以改變的。在程序運行過程
16、中,變量的值是可以改變的。 300變量值變量名存儲單元weightweightint weight=300;標識符、常量與變量、宏標識符、常量與變量、宏 變量定義的一般形式:變量定義的一般形式: 數據類型名數據類型名 變量名列表;變量名列表; 例如:例如:int s; /定義整型變量定義整型變量float x; /定義單精度浮點型變量定義單精度浮點型變量double area, length; /定義雙精度浮點型變量定義雙精度浮點型變量 定義變量時要指定變量名和數據類型定義變量時要指定變量名和數據類型 用變量名代表內存中的一個存儲單元用變量名代表內存中的一個存儲單元 存儲單元的大小存儲單元的大
17、小(字節(jié)數字節(jié)數)由變量的數據類型決定由變量的數據類型決定標識符、常量與變量、宏標識符、常量與變量、宏 變量必須先變量必須先定義定義,后,后使用使用。#include int main( ) double celsius, fahr; scanf(%lf,&fahr); celsius = 5 * (fahr - 32) / 9; printf(fahr = %f, celsius = %fn, fahr, celsius); return 0; int price=10; 定義一個變量定義一個變量,變量名叫變量名叫price,類型是類型是 int,初始值是初始值是10。 這里的這里的
18、“=”是一個賦值運算符,表示將是一個賦值運算符,表示將“=”右邊的右邊的值賦給左邊的變量。值賦給左邊的變量。 在定義變量時,就對變量進行賦值,這時候的賦值又在定義變量時,就對變量進行賦值,這時候的賦值又叫做初始化。叫做初始化。 int price; price=10;標識符、常量與變量、宏標識符、常量與變量、宏 int a=10,b=20; a=b; /將變量將變量b的值賦給變量的值賦給變量a,a,b均為均為20 b=a; /將變量將變量a的值賦給變量的值賦給變量b,a,b均為均為10C語言中的變量代表存儲數據的存儲單元語言中的變量代表存儲數據的存儲單元標識符、常量與變量、宏標識符、常量與變量
19、、宏標識符、常量與變量、宏標識符、常量與變量、宏 數學中的變量代表未知數數學中的變量代表未知數 數學中:數學中:x = x+1 (錯誤的錯誤的) C語言中:語言中: int x=10; x = x+1; (將變量將變量x所代表的存儲單元中的值讀取所代表的存儲單元中的值讀取出來,增加出來,增加1,再存放到存儲單元中。,再存放到存儲單元中。)10 11x = x+1x x int i;int j;j=i+10;請問請問 j的值是多少?的值是多少?標識符、常量與變量、宏標識符、常量與變量、宏int i=0;int j;j=i+10;所有變量第一次出現在賦值運算符的右邊之所有變量第一次出現在賦值運算符
20、的右邊之前應該被賦值一次前應該被賦值一次.標識符、常量與變量、宏標識符、常量與變量、宏 常量:常量:指在程序運行過程中值不變的量 常數:常數:例如,例如,32,3.14,“ABCD”,A 在在C C語言中,不同類型的常量有不同的表示方法。語言中,不同類型的常量有不同的表示方法。 符號常量:符號常量:在程序中為了能明確表示常量的含義,提高程序的可閱讀在程序中為了能明確表示常量的含義,提高程序的可閱讀性,常用一個符號名稱代表一個常量。性,常用一個符號名稱代表一個常量。 #include #define PRICE 30 /注意該行末尾沒有分號注意該行末尾沒有分號 / #define是是預編譯命令,
21、稱為宏預編譯命令,稱為宏( (macromacro) )定義定義。作用是作用是符號替換符號替換。 int main( ) printf( “total=%d”,PRICE*10 ); return 0; 在對程序進行編譯之前,系統(tǒng)會進行預處理,將所有在對程序進行編譯之前,系統(tǒng)會進行預處理,將所有PRICE符號常量全部替換為符號常量全部替換為30。預編譯后。預編譯后程序變成:程序變成: int main( ) printf( “total=%d”,30*10 ); return 0; 標識符、常量與變量、宏標識符、常量與變量、宏#include int main( ) float l,s,r,v
22、; r =3.5; l=2.0* *r; s= *r*r; v=4.0/3* *r*r*r; printf(l=%10.4fn,l); printf(s=%10.4fn,s); printf(v=%10.4fn,v); return 0;#define PI 3.1415926 PI3.14159263.14159263.1415926注意事項注意事項: 符號常量一定要先定義再使用 符號常量的值是不能改變的 符號常量在程序中可以直接引用而不必作任何說明,因為編譯程序能夠根據常量的書寫形式辨別其數據類型。PIPI標識符、常量與變量、宏標識符、常量與變量、宏 定義常量的另一種方法:定義常量的另一種
23、方法: const double pi=3. 1415926535; (C99標準標準!) #define PI 3.1415926 兩種方法的區(qū)別:兩種方法的區(qū)別: PI不分配存儲單元,不分配存儲單元,pi與變量一樣分配存儲單元,與變量一樣分配存儲單元,但但pi的值不允許修改。的值不允許修改。第第3章章 數據類型、運算符、表達式、數據類型、運算符、表達式、順序結構順序結構3.1 一個簡單程序的例子一個簡單程序的例子3.2 數據類型數據類型3.3 標識符、常量與變量、宏定義標識符、常量與變量、宏定義3.4 整數類型整數類型3.5 浮點數類型浮點數類型3.6 字符類型字符類型3.7 變量定義及初
24、始化變量定義及初始化3.8 各類數值型數據間的混合運算各類數值型數據間的混合運算整數類型整數類型整型常數的表示方法整型常數的表示方法有三種表示形式:有三種表示形式:(1 1)十進制:)十進制: 與數學中十進制寫法相同與數學中十進制寫法相同 如如 6 6、-31-31、101 101 等都是合法的。等都是合法的。(2 2)八進制:)八進制: 用用0 0開始的由開始的由0707構成的數構成的數 如如 07770777、012 012 等都是合法的。等都是合法的。(3 3)十六進制:用)十六進制:用0 x0 x或或0X0X開始的由開始的由 0,1,2,0,1,2,9,a,9,a,f (,f (或或
25、大寫大寫) )構成的數構成的數 如如 0 x1230 x123、0 xffFF 0 xffFF 等都是合法等都是合法 的整型常量。的整型常量。整數類型整數類型整型常數的表示方法整型常數的表示方法 還有一種被稱為長整型常數的整型常數,其表還有一種被稱為長整型常數的整型常數,其表示形式是在整型常數的三種表示形式后加上字示形式是在整型常數的三種表示形式后加上字母母l l或或L L。此外,還有。此外,還有LL,LULL,LU等多種形式。等多種形式。 如:如: 6l6l或或6L 012l6L 012l或或012L 012L 0 x12l 0 x12l或或0 x12L 012LU0 x12L 012LU或
26、或0 x12ul0 x12ul 123LL 0157LLU 123LL 0157LLU等。等。整數類型整數類型整型數據在內存中的存放方式整型數據在內存中的存放方式 數據在內存中是以二進制補碼數據在內存中是以二進制補碼(complement)形形式表示的。式表示的。 例如例如(32位機器位機器): int i; i=10; int j;j=-100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 i 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 j 符號位1 1 1 1 1 1 1 1 0 1 1 0
27、1 1 1 1 符號位整數類型整數類型原碼:符號位原碼:符號位+絕對值轉換后的二進制絕對值轉換后的二進制反碼:符號位反碼:符號位+絕對值轉換后的二進制每位的反絕對值轉換后的二進制每位的反補碼:符號位補碼:符號位+(反碼(反碼+1)一般帶符號的整數采用補碼表示方法。一般帶符號的整數采用補碼表示方法。整數類型整數類型 類 型 含 義 占存儲空間 數 值 的 范 圍 char 字符1個字節(jié) -128127-128127int 整型4個字節(jié)-21474836482147483647-21474836482147483647long 長整型4個字節(jié)-21474836482147483647-214748
28、36482147483647 僅以僅以32位編譯器為例!位編譯器為例!long long 長長整型長長整型8個字節(jié)個字節(jié)-263263-1short 短整型短整型2個字節(jié)個字節(jié)-3276832767unsigned的范圍?的范圍?二進制轉換輔助工具 http:/ 這由編譯系統(tǒng)自己決定。這由編譯系統(tǒng)自己決定。C標標準只規(guī)定了準只規(guī)定了long 類型的表示范圍不小于類型的表示范圍不小于int,但,但也允許它們表示范圍相同。也允許它們表示范圍相同。short類型的表示范類型的表示范圍不大于圍不大于int型。型。u在不同編譯器中,數據類型所占的字節(jié)數可能在不同編譯器中,數據類型所占的字節(jié)數可能是不同的
29、。如是不同的。如:GCC:GCC中中intint類型是類型是4 4個字節(jié)個字節(jié), , 而早而早期的期的TCTC中的中的intint是是2 2個字節(jié)。個字節(jié)。usizeof(sizeof(類型名)或類型名)或 sizeof(sizeof(表達式表達式) ) 返回該類型在使用編譯器中的所占字節(jié)數返回該類型在使用編譯器中的所占字節(jié)數如如:GCC:GCC中中sizeof(int)sizeof(int)是是 4 4,TCTC中中sizeof(int)sizeof(int)是是 2 2整數類型整數類型 如果所表示的數據都為正數,則可以將變量定義如果所表示的數據都為正數,則可以將變量定義“無符號無符號”整型
30、:整型: 無符號基本整型無符號基本整型 unsigned int 無符號短整型無符號短整型 unsigned short int 無符號長整型無符號長整型 unsigned long int 無符號雙長整型無符號雙長整型 unsigned long long int 無符號整型數據存儲單元的最高位不表示符號位無符號整型數據存儲單元的最高位不表示符號位 有符號基本整型有符號基本整型 signed int 有符號短整型有符號短整型 signed short int 有符號長整型有符號長整型 signed long int 有符號雙長整型有符號雙長整型 signed long long int 有符
31、號整型數據存儲單元的最高位代表符號位(有符號整型數據存儲單元的最高位代表符號位(0為正,為正,1為負)為負) short int a=32767,b=-1; unsigned short int u=65535; 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1a0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1b1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1符號位1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1ua=32767;b=-1;u=65535;在32位機中,變量a、b、u的實際存儲整數類型整數類型整型變量的定義和使用整型變量的
32、定義和使用 例例: #include int main() int a,b,c,d; /變量的定義變量的定義 a=12;b=-24; /變量的賦值變量的賦值 c=a+b; d=a-b; printf(a+b=%d,a-b=%dn,c,d); return 0; 運行結果為運行結果為: a+b=-12,a-b=36變量在使用之前必須先定義!a整數類型整數類型整型變量的溢出整型變量的溢出(overflow)(overflow) 一個一個intint型的變量最大允許值為型的變量最大允許值為INT_MAX(INT_MAX(定義在定義在limits.hlimits.h中中) ),最小為,最小為INT_M
33、ININT_MIN,如果超出范圍,如果超出范圍就會出現所謂溢出的運行時錯誤(就會出現所謂溢出的運行時錯誤(run-time run-time errorerror)。)。 如在一個如在一個3232位系統(tǒng)中,一個位系統(tǒng)中,一個intint類型的數據最類型的數據最大值為大值為21474836472147483647,如果再加上,如果再加上1 1,就會溢出,就會溢出, , 值變?yōu)橹底優(yōu)?2147483648-2147483648。整數類型整數類型整型變量的溢出整型變量的溢出 例:例: #include int main() int a,b; a=2147483647; b=a+1; printf(“
34、a=%d,b=%dn”,a,b); return 0; 3232位系統(tǒng)中的運行結果為位系統(tǒng)中的運行結果為: : a=a=21474836472147483647,b=-,b=-2147483642147483648 8整數類型整數類型整型變量的溢出整型變量的溢出 上上例:例: 如在如在3232位系統(tǒng)中位系統(tǒng)中 a: 7f ff ff ffa: 7f ff ff ff b: 80 00 00 00 b: 80 00 00 002147483647-2147483648運行時,系統(tǒng)不會給出溢出提示!運行時,系統(tǒng)不會給出溢出提示!防止溢出的發(fā)生是程序員的責任!防止溢出的發(fā)生是程序員的責任!重要提示重
35、要提示 編程時必須保證所有整型變量在任編程時必須保證所有整型變量在任何時候都沒有超出數據類型的取值何時候都沒有超出數據類型的取值范圍!范圍!第第3章章 數據類型、運算符、表達式、數據類型、運算符、表達式、順序結構順序結構3.1 一個簡單程序的例子一個簡單程序的例子3.2 數據類型數據類型3.3 標識符、常量與變量、宏定義標識符、常量與變量、宏定義3.4 整數類型整數類型3.5 浮點數類型浮點數類型3.6 字符類型字符類型3.7 變量定義及初始化變量定義及初始化3.8 各類數值型數據間的混合運算各類數值型數據間的混合運算浮點型類型浮點型類型 浮點型常數浮點型常數,有兩種表示形式:,有兩種表示形式
36、: (1)十進制小數形式)十進制小數形式 例如:例如:0.618、108.02、-1.414、 108.0、0.0等,這與等,這與數學中表示實數的方法相同;數學中表示實數的方法相同; (2)指數形式)指數形式例如:例如:108E2(或(或108e2)表示實數)表示實數108102 ; -16.578E5(-16.578e5)表示實數)表示實數-16.5781050.1234E-6 ,表示實數,表示實數0.123410-6浮點型類型浮點型類型 浮點型浮點型 單精度單精度( float型型 ) 雙精度雙精度( double型型 ) 長雙精度長雙精度( long double型型 ) 例如:定義浮點
37、型變量例如:定義浮點型變量 float f1,f2; double d1,d2; long double ld;浮點型類型浮點型類型 類 型 占存儲空間 有效數位數 數 值 范 圍 float4個字節(jié)6 7-3.4-3.41010-38-38 3.4 3.410103838 double8個字節(jié)15 16-1.7-1.71010-308-308 1.7 1.71010308308 long double16個字節(jié)18 19-1.2-1.21010-4932-4932 1.2 1.2101049324932 僅以某種機器為例!僅以某種機器為例!long double一般不支持!一般不支持!浮點型
38、類型浮點型類型 float和和double在計算機的存儲單元中是以指數形在計算機的存儲單元中是以指數形式存放的,即,把一個浮點數用符號位、指數和式存放的,即,把一個浮點數用符號位、指數和尾數來表示。指數部分和尾數部分各占多少位在尾數來表示。指數部分和尾數部分各占多少位在C標準中并無具體規(guī)定,由編譯系統(tǒng)自己決定。標準中并無具體規(guī)定,由編譯系統(tǒng)自己決定。符號位符號位指數指數尾數尾數長度長度float1(bit)8(bit)23(bit)32(bit)double1(bit)11(bit)52(bit)64(bit)浮點型類型浮點型類型浮點型數據在內存中的浮點型數據在內存中的存放方式存放方式 一個浮
39、點一個浮點floatfloat型數據一般在內存中占型數據一般在內存中占4 4個字節(jié)。與整個字節(jié)。與整型數據的存儲方式不同,浮點型數據是按照指數形式型數據的存儲方式不同,浮點型數據是按照指數形式存儲的。分成尾數和指數兩部分。存儲的。分成尾數和指數兩部分。 x127+c符號符號 0/1尾數部分尾數部分 M=1.x指數指數2c IEEE 754 float表示表示 M 2C : M稱為尾數,稱為尾數,C稱為階碼稱為階碼 M和和C均采用二進制表示。均采用二進制表示。 float 共共32位,在內存的存放形式:位,在內存的存放形式: 最高位:符號位,最高位:符號位, 指數(指數(8位):位):127+C
40、 尾數(尾數(23位):位):M除去最左邊的除去最左邊的1后的部分后的部分例例: 12.5 = (1100.1)2 = (1.1001)2 * 23 表示為表示為: 01000001 01001000 00000000 00000000浮點型類型浮點型類型 例例: -0.25 = -(0.01)2 = -(1.0)2 * 2-2 表示為表示為: 10111110 10000000 00000000 00000000 浮點型類型浮點型類型 IEEE 754 double表示表示 M 2C :M稱為尾數,稱為尾數,C稱為階碼稱為階碼 ,M和和C均采用二進均采用二進制表示。制表示。 double 共
41、共64位,在內存的存放形式:位,在內存的存放形式: 最高位:符號位最高位:符號位 指數(指數(11位):位):1023+C 尾數(尾數(52位):位):M除去最左邊的除去最左邊的1后的部分后的部分浮點型類型浮點型類型浮點型類型浮點型類型 例:例:double型浮點數型浮點數38414.4的內存存儲形式:的內存存儲形式: 1、把整數部和小數部分開處理、把整數部和小數部分開處理:(1)整數)整數部分的部分的十六進制十六進制表示表示:960E(1001011000001110)。(2)小數的處理)小數的處理: 0.4=0.01100110011001100110 38414.4的二進制表示:的二進制
42、表示: 1001011000001110.0110011001100110011001100110011001100110. 2、以指數形式表示:四舍五入取、以指數形式表示:四舍五入取53位位 1.0010110000011100110011001100110011001100110011001101*215 (小數點前面小數點前面只有一位,并且必只有一位,并且必為為1,該該1為隱藏值為隱藏值,在內存是不存儲的在內存是不存儲的) 3、尾數為小數點后的、尾數為小數點后的52位,指數為位,指數為15,將指數用二進制,將指數用二進制 表示。表示。 指數占指數占11位,將指數先位,將指數先加上加上10
43、23再轉化為二進制表示。再轉化為二進制表示。 15+1023=1038,其二進制表示為:其二進制表示為:100 00001110 4、符號位為、符號位為0(正數),將三部分(正數),將三部分合在一起(尾數最高位的合在一起(尾數最高位的1不要):不要):01000000 11100010 11000001 11001100 11001100 11001100 11001100 11001101按字節(jié)倒序存儲的十六進制數就是:按字節(jié)倒序存儲的十六進制數就是: CD CC CC CC CC C1 E2 40 一個基本類型數據的幾個字節(jié)的在內存中存放次序,一個基本類型數據的幾個字節(jié)的在內存中存放次序,
44、不同不同CPU可能不同??赡懿煌H纾喝纾篒ntel CPU:稱為:稱為 little_endian(小端格式)(小端格式)浮點型類型浮點型類型 地址編號地址編號0 x40000000CD0 x40000001CC0 x40000002CC0 x40000003CC0 x40000004CC0 x40000005C10 x40000006E20 x4000000740低地址中存放的是數據的低字節(jié);高地址存放的是數據的高字節(jié)。浮點型類型浮點型類型浮點型數據的表示誤差浮點型數據的表示誤差 由于浮點型變量存放在有限的幾個字節(jié)的存儲由于浮點型變量存放在有限的幾個字節(jié)的存儲單元中,所以能提供的有效數字總
45、是有限的,單元中,所以能提供的有效數字總是有限的,因此有效位以外的數字將被舍去,由此會產生因此有效位以外的數字將被舍去,由此會產生誤差。誤差。 即:即:浮點數的表示是不精確的浮點數的表示是不精確的! !浮點型類型浮點型類型浮點型數據的誤差浮點型數據的誤差例例: :#include int main() double a; a=0.1; printf(a = %.17fn,a); return 0; GCC GCC運行結果為運行結果為: : a = 0.10000000000000001 a = 0.10000000000000001 由于一個由于一個doubledouble變量只能保證變量只能
46、保證1616位有效數字,所以后面位有效數字,所以后面的數字是無意義的。的數字是無意義的。 類似的還有:類似的還有:1.0/31.0/3* *3 3 結果并不一定等于結果并不一定等于1 1。浮點型類型浮點型類型浮點型數據的誤差浮點型數據的誤差 例例: : #include int main() double a,b; b = 2.0e20 + 1.0; a = b - 2.0e20; printf(%f n, a); return 0; GCC GCC運行結果為運行結果為: : 0.000000 浮點型常量的類型浮點型常量的類型 浮點型常量的類型為浮點型常量的類型為double,而不是,而不是f
47、loat。 例如:例如: float a=3.14159; 在編譯時,系統(tǒng)給變量在編譯時,系統(tǒng)給變量a分配分配4個字節(jié),但對于浮點個字節(jié),但對于浮點型常量型常量3.14159則按照則按照double型(型(8個字節(jié))處理,系個字節(jié))處理,系統(tǒng)會發(fā)出警告統(tǒng)會發(fā)出警告“warning:truncation from const double to float”,提醒用戶這種轉換可能會損失精,提醒用戶這種轉換可能會損失精度。度。浮點型類型浮點型類型 float f; f=2.45678*4523.65; 系統(tǒng)將系統(tǒng)將2.45678和和4523.65按按double數據存儲和運算,數據存儲和運算,得到
48、一個得到一個double的乘積,然后取前的乘積,然后取前7位賦值給位賦值給float變變量量 f,這樣做的目的是為了保證計算結果更精確。但,這樣做的目的是為了保證計算結果更精確。但是運算速度降低了??梢栽谑沁\算速度降低了??梢栽诟↑c型常量的后面加上浮點型常量的后面加上字符字符f或或F(如如2.45678f、4523.65F),此時編譯系統(tǒng)會,此時編譯系統(tǒng)會按按float處理它們。處理它們。浮點型類型浮點型類型浮點型類型浮點型類型 浮點型變量的溢出浮點型變量的溢出(overflow)(overflow)和下和下溢溢(underflow(underflow) ) 一個一個doubledouble型
49、的變量最大絕對值為型的變量最大絕對值為DBL_MAX(DBL_MAX(定義在定義在float.hfloat.h中中) )(如:(如:1.7976931348623157e+308),最?。?,最小絕對值為絕對值為DBL_MINDBL_MIN(如:(如:2.2250738585072014e-308),),如果超出范圍就會出現上溢或下溢的錯誤情況。如果超出范圍就會出現上溢或下溢的錯誤情況。浮點型類型浮點型類型 上溢上溢 double toobig = DBL_MAX * 100.0; printf(%en, toobig); 32 32位系統(tǒng)中的運行結果可能為位系統(tǒng)中的運行結果可能為: : 1.#
50、INF00e+000 浮點型類型浮點型類型 下溢下溢( (過于接近于過于接近于0)0) double toosmall = DBL_MIN / 1E30; printf(%en, toosmall); 32 32位系統(tǒng)中的運行結果可能為位系統(tǒng)中的運行結果可能為: : 0.000000e+000第第3章章 數據類型、運算符、表達式、數據類型、運算符、表達式、順序結構順序結構3.1 一個簡單程序的例子一個簡單程序的例子3.2 數據類型數據類型3.3 標識符、常量與變量、宏定義標識符、常量與變量、宏定義3.4 整數類型整數類型3.5 浮點數類型浮點數類型3.6 字符類型字符類型3.7 變量定義及初始
51、化變量定義及初始化3.8 各類數值型數據間的混合運算各類數值型數據間的混合運算字符類型字符類型 字符常數字符常數 普通字符:普通字符:用用單引號單引號括起的一個字符,如括起的一個字符,如a、?、B、5和和*等都是合法的字符常量。等都是合法的字符常量。 a和和A是不同的字符常量。是不同的字符常量。字符型數據存儲在內存中占一個字節(jié),字符型數據存儲在內存中占一個字節(jié),是以其代碼(是以其代碼(ASCII碼碼)存儲的。存儲的。字符常量 存儲形式 十進制表示A01 000 00165a01 100 00197?00 111 11163500 11010153 附錄附錄B,給出給出了常用字符了常用字符與其對
52、應的與其對應的ASCII碼。碼。字符類型字符類型 ASCII - American Standard Code for Information Interchange。 ASCII字符集的大小為字符集的大小為7位,位,MSB為為0。 ASCII字符集包含可打印字符和非打印字符(控字符集包含可打印字符和非打印字符(控制字符)兩類。制字符)兩類。 轉義字符:轉義字符:在在ASCII碼表中有一些非打印的控制字符碼表中有一些非打印的控制字符,例如例如回車、響鈴、退格回車、響鈴、退格等。為了能夠表示它們,等。為了能夠表示它們,C語言采用在語言采用在反斜杠反斜杠()字符后加其他字符字符后加其他字符的方法來
53、解決。這稱為的方法來解決。這稱為轉義序轉義序列字符列字符。 轉義字符中轉義字符中反斜杠反斜杠()后面的字符在編譯時需要特殊處后面的字符在編譯時需要特殊處理,不能當作普通字符對待。理,不能當作普通字符對待。 例如,例如,n是在第一個字符是在第一個字符反斜杠(反斜杠()后緊跟一個字后緊跟一個字符符n,它表示一個換行字符。,它表示一個換行字符。 n代表一個字符(換行符)代表一個字符(換行符),其,其ASCII為為10。字符類型字符類型字符類型字符類型轉義序列轉義序列 含含 義義ASCII碼碼 n n 回車換行,將光標移至下一行首回車換行,將光標移至下一行首10r r 回車,將光標移至本行開頭位置回車
54、,將光標移至本行開頭位置 13b b 退格,將光標左移一格退格,將光標左移一格 8t t 水平制表,光標移至本行下一水平制表,光標移至本行下一tabtab位置位置 9v v 垂直制表符垂直制表符 11f f 換頁,將光標移至下一頁開頭位置換頁,將光標移至下一頁開頭位置 12aa響鈴響鈴70 0 空字符,其符號常量名為空字符,其符號常量名為NULL NULL 0 單引號字符單引號字符 39 ”雙引號字符雙引號字符34反斜杠字符反斜杠字符92ooo ooo 1 1到到3 3位八進制數所代表的字符位八進制數所代表的字符 xhh xhh 1 1到到2 2位十六進制數所代表的字符位十六進制數所代表的字符
55、 字符類型字符類型字符變量字符變量 字符變量用于存放字符,在內存中占字符變量用于存放字符,在內存中占1 1字節(jié)。字節(jié)。 字符變量的定義形式如下:字符變量的定義形式如下: char c1char c1,c2c2; 可以把字符常量賦值給字符變量,例如:可以把字符常量賦值給字符變量,例如: c1=c1=a a;c2=c2=b b;字符類型字符類型字符型變量數據在內存中的存放方式字符型變量數據在內存中的存放方式 將一個字符常量存放到一個字符變量中,其實將一個字符常量存放到一個字符變量中,其實是存放了該字符的是存放了該字符的ASCIIASCII碼碼( (也稱字符的內碼也稱字符的內碼) )。 例如:例如:
56、 char c1char c1,c2c2;c1=c1=a a; c2=; c2=b b; c1 0 1 1 0 0 0 0 1 0 1 1 0 0 0 1 0c2 字符類型字符類型#include int main() char c1,c2; c1=97; c2=98; /向字符變量賦整數值向字符變量賦整數值 /* c1=a; c2=b; */ printf(“%c,%cn”,c1,c2); /以字符形式輸出以字符形式輸出 printf(“%d,%dn”,c1,c2); /以十進制整數形式輸出以十進制整數形式輸出 return 0; 運行的結果是:運行的結果是: a,b 97,98字符類型字符
57、類型 一個字符變量中的值,是被當成整數值使用,一個字符變量中的值,是被當成整數值使用,還是當成字符使用,完全看程序員的意愿。還是當成字符使用,完全看程序員的意愿。0 1 1 0 0 0 0 1c1a%c%d97字符類型字符類型 例例:大小寫字母的轉換大小寫字母的轉換 #include int main() char c1,c2; c1=a;c2=b; c1=c1-32; c2=c2-32; printf(%c,%cn,c1,c2); return 0; 運行的結果是:運行的結果是: A,B注意:在ASCII表(P377)中大寫字母排在小寫字母的前面,且兩者間隔有6個其他字母。從ASCII碼表可
58、以看到每個小寫字母比它相應的大寫字母的ASCII碼值大32。字符常量和變量可以看成是一個8位的整型數據。 所以:c1=a+2;則c1中的值99(即c字符)。字符類型字符類型 字符字符1和整數和整數1是不同的概念是不同的概念: 字符字符1只是代表一個形狀為只是代表一個形狀為1的符號,的符號,在內存中以在內存中以ASCII碼碼(49)二進制二進制形式存儲,占形式存儲,占1個字節(jié)個字節(jié) 整數整數1是以整數存儲方式是以整數存儲方式(二進制補碼方式二進制補碼方式)存存儲的,儲的,以以short int型存放則型存放則占占2個個字節(jié)字節(jié)0 0 1 1 0 0 0 1 0 0 1 1 0 0 0 1 0 0
59、 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 0 0 10 0 0 0 0 0 0 1字符類型字符類型 字符串常數字符串常數 用雙引號括起來的一個或多個字符序列,如用雙引號括起來的一個或多個字符序列,如How How are youare you 、 a a 、 chinachina、 、 漢字等都是等都是合法的字符串常數。合法的字符串常數。 每個字符串常數都用一個每個字符串常數都用一個0 0(00或或NULLNULL) )作為結作為結束符,所以每個字符串長度為其字符個數加束符,所以每個字符串長度為其字符個數加1 1。 如如a a的長度為的長度為2 2個字節(jié)個字節(jié)
60、; ;而而How are youHow are you的長度的長度為為1212個字節(jié);個字節(jié);漢字的長度為的長度為5 5個字節(jié)。個字節(jié)。字符類型字符類型 字符串常數字符串常數 How are youHow are you 在內存中的存放形式:在內存中的存放形式:0 1 0 0 1 0 0 00 1 1 0 1 1 1 10 0 1 0 0 0 0 00 1 1 1 0 1 1 10 1 1 0 0 0 0 10 1 1 1 0 0 1 00 0 1 0 0 0 0 00 1 1 0 0 1 0 10 1 1 1 1 0 0 10 1 1 0 1 1 1 10 0 0 0 0 0 0 00 1 1 1 0 1 0 10uHow a
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- Z互聯網消費金融公司客戶滿意度提升策略研究
- 2025至2030中國社交軟件行業(yè)發(fā)展趨勢與行業(yè)項目調研及市場前景預測評估報告
- 施肥渾水膜孔灌點源入滲土壤水、氮、熱耦合特性研究
- 低溫脅迫下冠菌素對棉花幼苗生理生化的影響研究
- 女孩之間的故事800字9篇
- 2024年長春中醫(yī)藥大學附屬醫(yī)院招聘考試真題
- 2024年山東省文化和旅游廳下屬事業(yè)單位真題
- 給洋洋的一封信750字(13篇)
- 基于電熱耦合模型的鋰電池多狀態(tài)聯合估計方法研究
- 2024年麗江龍泉市中學教師招聘筆試真題
- GB/T 45098-2024營運純電動汽車換電服務技術要求
- 2025年中考英語話題作文范文20篇
- 政府經濟學-電大易考通考試題目答案 (一)
- 公交車駕駛員安全培訓
- 山西省云時代技術有限公司筆試題庫
- 龍鑫煤礦礦井概況-2
- 國際合作項目管理制度
- 上海市算力基礎設施發(fā)展報告2024年
- 大模型原理與技術-課件 chap14 基于大模型的航空航天裝備制造
- 【MOOC】線性代數-同濟大學 中國大學慕課MOOC答案
- 離斷傷應急救護原則教學
評論
0/150
提交評論