C語言學習筆記(一)

2021-10-03 05:27:08 字數 4306 閱讀 6765

計算機把浮點數分成小數部分和指數部分來表示,並且分開儲存這兩部分。

一般而言,儲存乙個int要占用乙個機器字長。

宣告變數時,只為變數分配記憶體空間,並不做初始化操作。(區域性變數)

利用printf列印資料時,轉義符的個數要和後面的引數個數匹配。

c語言中,0x或0x字首表示十六進製制值。0字首表示八進位制值。

不同的進製使用不同的轉換說明。十進位制使用%d,八進位制使用%o,十六進製制使用%x,另外,要顯示各進製數的字首0、0x、0x,必須分別使用%#o,%#x,%#x。

c語言提供3個附屬關鍵字修飾基本整數型別:short、long、unsigned。short int型別(或簡寫為short)占用的空間可能比int型別少,short是有符號型別。long int或long占用的空間可能比int多,long也是有符號型別。long long int或long long(c99標準加入),占用的空間可能比long多,該型別至少佔64位。long long也是有符號型別。unsigned int或unsigned只用於非負數的場合。

在c90標準中,新增了unsigned long int或unsigned long和unsigned short int或unsigned short。c99標準又新增了unsigned long long int 或unsigned long long。

c語言為了適應不同的機器,只規定了short占用的空間不能多於int,long占用的空間不能少於int。

unsigned或unsigned int常用於計數。

如果在long型別和int型別占用空間相同的機器上編寫**,當確實需要32位的整數時,應使用long而不是int,以便把程式移植到16位機上時,也能正常工作。在int設定為32位的系統中要使用16位的值,應使用short型別以節省空間。使用short型別的另乙個原因是,計算機中某些元件使用的硬體暫存器是16位。

通常,**中使用的數值,都被儲存為int型別。如果乙個數值超過int的範圍,編譯器會將其視為long int。如果數字超過了long int的範圍,編譯器則將其視為unsigned long。如果還不夠大,則將其視為long long或者unsigned long long。

八進位制或十六進製制常量被視為int型別,如果值太大,編譯器嘗試將它們視為unsigned int,如果還不夠,編譯器會依次使用long、unsigned long、long long、unsigned long long。

要將乙個較小的數字常量作為long型別看待,可以在值的末尾加上l或者l。當成long long型別看到,可以在後面加ll或者ll。另外,u或者u字尾表示unsigned long long。如5ull、6llu。

當達到它能表示的最大值時,會重新從起始點開始。unsigned int型別的變數從0開始。而int型別的變數從-2147483648開始。

溢位行為屬於未定義行為,c標準並未定義有符號型別的溢位規則。

列印unsigned int型別的值,使用%u轉換說明。列印long型別的值,使用%ld轉換說明。在x或o前面可以使用l字首,分別表示以十六進製制數表示long型別整數和以八進位制數表示long型別整數。

對於short型別,可以使用h字首,%hd表示以十進位制顯示short型別整數。%ho表示以八進位制數表示short整數。另外h和l字首都可以和u一起使用,表示無符號型別。

對於short型別的整數,無論以%hd還是%d列印,值都是一樣的,因為在給函式傳遞引數的時候,c編譯器將short型別的值自動轉化為int型別的值。因為int型別被認為時計算機處理整型數時最高效的型別。

標準的ascii碼的範圍是0-127,只需7位二進位制數表示即可。許多其他系統還提供擴充套件ascii碼,也在8位的表示範圍之內。一般而言,c語言會保證char型別足夠大,以儲存系統的基本字符集。

許多字符集都超過127,甚至多於255。如日本漢字(kanji)字符集。商用的unicode建立了乙個能表示世界範圍內多種字符集的系統,目前包含的字元超過110000個。

c語言將1位元組定義為char型別占用的位數,因此無論16位系統還是32位系統,都可以使用char型別。

c語言中,使用單引號括起來的單個字元被稱為字元常量。實際上,字元以數字形式儲存,所以也可以使用數字來對字元變數賦值。

字元常量具有乙個特性,將乙個字元常量』asdf』賦值給乙個char型別變數,那麼只有最後8位是有效的,即char型別變數裡面儲存的是』f』。

表示ascii碼中的非列印字元時,可以使用對應的碼值或者使用轉移字元。

c標準規定報警字元不得改變活躍位置。標準中的活躍位置指的是顯示裝置中下乙個字元即將出現的位置,也即游標位置就是活躍位置。

從c90開始,不僅可以使用八進位制、十進位制形式表示字元常量,還可以使用16進製制形式來表示字元常量。比如,ctrl+p字元的ascii碼十六進製製碼為10,可表示為『\x10』或『\x010』。

有些編譯器將char實現為有符號型別,而有的編譯器又將char實現為無符號型別。在c90標準中,允許在char的前面使用unsigned 或signed。這樣,無論編譯器預設char是什麼型別都不要緊了。

c99中,新增了_bool型別,用於表示布林值,即true和false。c語言中,用1表示true,0表示false,所以_bool型別實際上也是一種整數型別。

c語言提供了許多的整數型別,但某些型別名在不同系統中的功能不一樣,c99增加了兩個標頭檔案stdint.h和inttypes.h,以確保c語言的型別在各個系統中的功能一致。

精確寬度整數型別、最小寬度型別、最快最小寬度型別、

c標準規定,float型別必須至少能表示6位有效數字,且取值範圍至少是10e-37到10e37。通常,系統儲存乙個浮點數需要32位,其中8位用於表示指數的值和符號,剩下的24位表示非指數部分及其符號。

double型別和float型別的最小取值範圍相同,但至少必須能表示10位有效數字。c語言的第三種浮點型別為long double,c語言只保證long double型別至少與double型別的精度相同。

**中,有多種形式書寫浮點數,浮點型常量的基本形式:有符號的數字(包括小數點),後面緊跟e或者e,最後是乙個有符號數字表示10的指數。浮點數可以沒有小數點或者指數部分,但是不能兩者同時省略。

預設情況下,編譯器假定浮點型常量是double型別的精度。在浮點數後面加f或f字尾,可以覆蓋預設設定。使用l或l字尾,使得數字變成long double。

c99標準中,新增一種新的浮點型常量格式,用十六進製制表示浮點型常量。即在十六進製制數前加上十六進製制字首(0x或者0x),用p或者p代替e或者e,用2的冪代替10的冪(p計數法)。比如0xa.1fp10表示的值是(10 + 1/16 + 15/256)* 1024。需要說明的是,並非所有的編譯器都支援c99的這一特性。

使用%f轉換說明列印十進位制計數法的float或者double,用%e列印指數計數法的浮點數。如果系統支援十六進製制格式的浮點數,可用a和a分別代替e和e。列印long double型別使用%lf、%le或者%la。

當計算導致數字超過當前浮點型能表示的最大值,就會發生上溢,這種行為在過去是未定義的,但現在c語言規定,這種情況下,會賦予乙個表示無窮大的特定值。

假設乙個數字是float型別能用全部精度 表示的最小的數,現在將它除以2,這時候指數會減少,但如果指數已經是最小值的時候,計算機只能將尾數部分的位向右移,此時,雖然得到結果,但是卻損失了原有末尾的有效數字,這種情況叫下溢,c語言將損失了型別全精度的浮點值稱為低於正常的浮點值。目前,c庫已經提供了用於檢查計算是否會產生低於正常值的函式。

另乙個特殊的浮點值為nan(not a number)。比如給asin()函式傳遞乙個值,該函式返回乙個角度值。但是正弦值不能超過1,如果傳入大於1的數,該函式的行為是未定義,這時,函式返回乙個nan值。

c99標準支援複數型別和虛數型別,但是有所保留。一般而言,複數型別都是可選項。c11標準將整個複數軟體包作為可選項。

c語言有3種複數型別:float_complex、double_complex、long double_complex。每個複數變數包括兩個基本型別的值,分別表示複數的實部和虛部。c語言的3種虛數型別:float_imaginary、double_imaginary和long double_imaginary。如果包含complex.h標頭檔案,便可用complex代替_complex,用imaginary代替_imaginary。還可用i代替-1的平方根。

sizeof是c語言的內建運算子,以位元組為單位給出指定型別的大小。c99和c11提供%zd轉換說明來匹配sizeof的返回型別。一些不支援c99和c11的編譯器可用%u或%lu來代替%zd。

c語言定義了char型別是1個位元組。而在char為16位、double型別為64位的系統中,sizeof給出的double是4位元組。

c語言規定,當緩衝區滿、遇到換行字元、或者需要輸入的時候,此時會重新整理緩衝區。另一種重新整理緩衝區的方法是使用fflush()函式。

c語言允許混合資料型別的表示式,但是會進行自動型別轉換。以便實際運算時統一使用一種型別。

C語言學習筆記(一)

c 語言只提供了以下幾種基本資料型別 char 字元刑占用乙個位元組,可以存放本地字符集中的乙個字元 int整型 通常反應了所用機器中整數的自然長度 float 單精度浮點型 doule 雙精度浮點型 此外,可以在這些基本資料型別的錢買年加上些限定符。short 與long 兩個限定符用於限定整型 ...

C語言學習筆記(一)

進製問題 1 進製 2進製 8進製 10進製 16進製制 2進製 進製規則是逢二進一,1 二進位制轉十進位制 方法 按權展開求和 二進位制怎麼會有小數點 例 規律 個位上的數字的次數是0,十位上的數字的次數是1,依次遞增,而十 分位的數字的次數是 1,百分位上數字的次數是 2,依次遞減。注意 不是任...

C語言學習筆記(一)

預處理指令 巨集定義 define,undef 檔案包含 include 條件編譯 ifdef,if,elif,else,endif define disk capacity sides tracks per side sectors per track bytes per sector 對於帶引數...