1. 程式人生 > >C語言資料型別部分總結

C語言資料型別部分總結

第三章  資料和C

1、float型別的資料是遵循IEEE754標準在計算機內部進行儲存的,這樣帶來的問題是儲存的時候可能會丟失進度,例如:

# include<stdio.h>

int main(void)

{

     float value = 66.6;

printf("%f\n",value);//將%f修改為%.2f 就可以精確輸出66.60

return 0;

}

上述程式在vc++6.0中的輸出結果是:66.599998!由此可見,在計算機中的浮點數並不是準確儲存的。在這裡需要對%f做個修改:%.2f就可以準確輸出結果!

C中進位制的表示:

C語言中,有專門的字首表明是何種進位制

16進位制:0x或者0X    顯示:%x(顯示的字母小寫);%X(顯示的字母大寫)

8進位制:0(零)          顯示:%0

10進位制:普通數字       顯示:%d

如果想顯示C語言字首,可以使用%#o,%#x , %#X分別表示0、0x和0X字首。

2、為什麼有符號型別int表示的值從-32768-32767,而無符號型別unsigned是0-65535.

因為有符號型別最高位用於表示數值的正負,而無符號型別最高位也表示一位數值,當然比有符號型別的要大。

3、整數的溢位:

無符號數j就像汽車的里程指示牌,當達到最大值就會溢位到起始點,整數i也是一樣,他們的區別主要是unsigned int變數j 的起點是0,而int變數的起始點是-2147483648。

Char型別:

Char是字元型,並不是說在計算機中儲存字元,因為計算機只能儲存01程式碼,那麼是怎麼實現儲存字元的呢?很簡單,char在技術實現上是整數型別,為了處理字元,計算機使用一種數字編碼,用特定的整數表示特定的字元。我們通常知道的ASCII碼就是如此了。‘A’-65,  ‘a’-97

4、inttypes.h標頭檔案

C99標準提供一個可選的名字集合,用於精確的描述相關資訊,例如int16_t表示一個16位有符號整數型別,uint32_t表示一個32位的無符號數整數型別,就需要在程式的標頭檔案中包含inttypes.h

5、在預設情況下,編譯器將浮點常量當做double型別,假設some 是一個float變數,那麼,some= 2.0 * 4.0;2.0和4.0被儲存為double型別,通常使用64位進行儲存。

Printf()函式使用%f格式說明符列印十進位制記數法的float和double數字,用%e列印指數記數法的數字

6、浮點數上溢和下溢:

浮點數上溢:C語言為toobig賦予了一個代表無窮大的特殊值,printf()函式顯示此值為inf(infinity)

浮點數下溢:設想一個十分小的數,它是浮點數的最小的一位數,當它除以2,按照除法右移的規定,只能向右右移一位,那麼該數最高位就會為0,最低位被捨棄,像這樣子就叫丟失進度,此過程叫下溢。

7、浮點數一個有趣、奇怪的事情:

一個數加1後再減去這個數,結果為多少?答案當然是1!但是在浮點數裡,卻並不一定。

比如:2.0e20為2後面加20個0,如果對它加1,那麼變化的是21位,如果要正確計算,至少需要儲存21位有效數字,而float數字只有6、7位有效數字,所以這個計算註定是不正確的。如果是2.0e4代替2.0e20,則能得到正確的結果,因為改變的是第5位數字,float數字對此足夠精確。

8、Printf函式和scanf函式的引數和易犯的錯誤:

Printf(“hello,world!\n”);包含一個引數,用雙引號括起來,是字串。不論長度多少,都只算一個引數

Scanf(“%d”,&weight);包含兩個引數:“%d”和weight

注意:printf(“%d\n”,float);

使用%d顯示float值不會把該float值轉換為近似的int值,而是顯示垃圾值,與之類似,%f顯示int值也不會把該int值轉換為浮點值。

9、轉義字元:退格:\b;製表符:\t;回車符:\r;警告聲:\a;可以參考下例:

# include<stdio.h>

int main(void)

{

      float salary;

      printf("\aEnter your desired monthlysalary: ");//\a表示的發出警笛聲

      printf(" $_______\b\b\b\b\b\b\b");//\b表示的是退格,有幾個\b,就向前面退幾格

      scanf("%f", &salary);

      printf("\n\t$%.2f a month is $%.2f ayear.", salary, salary * 12.0);//%.2f是能讓浮點數精確輸出。\t是製表符,換行符使得游標移到下一行的起始位置,製表符使游標移到該行中的下一個製表點,一般是第9列。

      printf("\rGee!\n");//\r使得游標移到當前行的起始位置

      return 0;

}

10、Printf()函式什麼時候真正把輸出傳送給螢幕?

首先printf()語句將輸出傳遞給一個buffer緩衝區,而C語言在以下的情況下將緩衝區內容傳給螢幕:緩衝區滿的時候、遇到換行符的售後以及需要輸入的時候,而將緩衝區內容傳送給螢幕也稱為:重新整理緩衝區(flushing the buffer).

11、總結:C語言基本的資料型別包含兩大類:整數型別和浮點型別。

整數型別:

兩個重要特徵是:型別的大小以及有符號數還是無符號數,最小的整形是char,其他的型別還有short、int、long、long long型別,最後_bool型別是一種無符號型別,只包含0和1兩個值,對應false和true。

整數可以表達為十進位制、八進位制、十六進位制形式。字首0表示八進位制數,字首0x或者0X表示十六進位制。例如:32、040、0x20表示的是十進位制、八進位制、十六進位制的同一個值。字元常量用‘’單引號括起來,字串常量用“”雙引號括起來。

浮點數型別:float、double、long double