一、整數與浮點數之間的區別
兩者的存儲方式不一樣,整數是直接以二進制形式進行存儲,對於浮點數,需要將小數部分和指數部分分開存儲。兩者之間的區別還有如下:
1-整數沒有小數部分,浮點數有小數部分;
2-浮點數可以表示的范圍比整數大;
3-對於一些算術運算(兩個很大的數相減),浮點數損失的精度更多;
4-在任何區間內都存在着無數個實數,所以計算機的浮點數不能表示區間內的所有值,通常只是實際值的近似值;
5-過去,浮點運算比整數運算慢,不過,有了浮點處理器,速度上的差距有了一定的縮小。
二、整數
int類型是有符號整型,可以是正整數、負整數或零。其取值范圍依計算機系統而異。一般而言,存儲一個int數據需要占用一個機器字長,正負號會占用其中一位。處理器的機器字長越長,int的范圍越大。ISO C 規定。int的取值范圍最小為-32768~32767。
八進制、十進制、十六進制int型數據的顯示:%o - 八進制,%d - 十進制,%x - 十六進制。如果是需要顯示各進制數的前綴0、0x和0X,必須分別使用%#o、%#x、%#oX。
占用存儲空間:short <= int < long < long long。【個人PC上常見的設置:long long - 64bit,long - 32bit, int - 16bit/32bit, short - 16bit。】【C 標准對基本數據類型之規定的允許的最小大小】
short、long、long long 和 unsigned 類型數據的打印:%u - unsigned int;%ld - long int;%lo、%lx形式將long型數據以八進制、十六進制打印;對於short類型,使用 h 前綴,%hd,%ho等都是有效的;l 和 h 前綴都可以和 u 一塊使用。【在使用printf()函數進行打印的時候,確保轉換說明的類型與待打印值的類型相匹配,否則,會有意想不到的錯誤】
對於short型數據,不管是以%hd形式進行打印還是以%d形式進行打印,結果都是一樣的。【原因:在給函數傳遞參數時,C 編譯器會把 short 類型的數據自動轉換成 int。1 - 轉換的原因為 int 類型被認為是計算機處理整數類型時最高效的類型,在short 和 int 類型的大小不同的計算機中,用 int 類型的參數傳遞熟讀更快;2 - 使用 h 修飾符可以顯示較大整數被截斷成 short 類型值的情況。】
三、浮點數
1、float、double、long double
C 標准規定,float 類型必須至少能表示6位有效數字,且取值范圍至少是10^(-37) ~ 10^(+37)。通常,系統存儲一個 float 類型的數據需要占用32位,其中8位用於表示指數的值和符號,剩下24位用於表示非指數部分(也叫做尾數或有效數)及其符號。
double 類型和 float 類型的最小值范圍相同,但至少能必須表示10位有效數字。一般情況下,double 類型的數據占用64位而不是32位,一些系統將多出的32位全部用來表示非指數部分,這種做法不僅增加了有效數字的位數(提高精度),還減少了舍入誤差,還有一些系統會把其中的一些位分配給指數部分,以容納更大的指數,增加可表示數的范圍。無論如何,實際情況中 double 類型的數據至少有13位有效數字,超過最低標准。
2、浮點型常量
浮點型常量的基本形式:有符號的數據(包括小數點)+ e / E + 有符號數表示10的指數。【e.g.:-1.56E+12,2.87e-3等】
簡寫形式:‘ + ’可以省略;可以沒有小數點【e.g. 2E5】或指數部分【e.g. 19.28】,但是二者不能同時省略;可以省略小數部分【e.g. 3.E16】或整數部分【e.g. .45E-6】,但是二者不能同時省略.除了上述的簡寫形式,以下幾種簡寫形式也是有效的【3.14159、.2、4e16、.8E-5、100.0等】。【不要在浮點型常量中間加空格!!!】
3、浮點數的使用
float some = 1.0 * 2.0;
默認情況下,編譯器假定浮點型常量是double類型的精度。對於上述表達式的處理,4.0和2.0會被存儲為64位的double類型,使用雙精度進行乘法運算,然后將乘積截斷成float類型的寬度。雖然說這種計算方式得出來結果精度更高,但是會減慢程序的運行速度。
在浮點數后邊加上 f / F 后綴可覆蓋默認設置,編譯器會將浮點數常量看作是 float 類型;使用 l / L 后綴使得數字成為long double 類型;沒有后綴的浮點型常量是 double 類型。
4、浮點數的打印
%f - 打印十進制計數法的 float 和 double 類型浮點數【 %Lf 等亦可】;
%e - 打印指數計數法的浮點數【 %Le 等亦可】;
%a - 打印十六進制的浮點數(前提是系統支持)【 %La 等亦可】。
5、浮點值的上溢和下溢
上溢(overflow):數字過大,超過當前類型能表達的范圍。
下溢(underflow):當前類型數據的全精度被損失。