C語(yǔ)言是當(dāng)前所有開(kāi)發(fā)技術(shù)中使用較為廣泛的一門(mén)語(yǔ)言,從它誕生之日起就深受程序員的喜愛(ài)。隨著C語(yǔ)言的普及,后來(lái)的開(kāi)發(fā)語(yǔ)言都或多或少地借鑒或遵循了它的一些模式。另外,C語(yǔ)言是計(jì)算機(jī)編程領(lǐng)域中使用最早的高級(jí)語(yǔ)言之一,它的出現(xiàn)推動(dòng)了軟件行業(yè)的迅猛發(fā)展。本章將簡(jiǎn)要介紹C語(yǔ)言的基本知識(shí),為讀者學(xué)習(xí)后面的內(nèi)容打下基礎(chǔ)。
1.1 計(jì)算機(jī)應(yīng)用基礎(chǔ)
計(jì)算機(jī)(computer)是一種能接收和存儲(chǔ)信息,并按照內(nèi)部存儲(chǔ)的程序?qū)斎氲男畔⑦M(jìn)行加工、處理,然后把處理結(jié)果進(jìn)行輸出的高度自動(dòng)化的電子設(shè)備。本節(jié)介紹計(jì)算機(jī)應(yīng)用的基礎(chǔ)知識(shí),為讀者學(xué)習(xí)后面的知識(shí)打下基礎(chǔ)。
1.1.1 中央處理器
中央處理器就是我們平常說(shuō)的CPU(Central Processing Unit),是一塊超大規(guī)模的集成電路,是計(jì)算機(jī)的運(yùn)算核心和控制核心。它主要包括算術(shù)和邏輯單元(Arithmetic and Logic Unit,ALU)和控制單元(Control Unit,CU)兩大部件。此外,它還包括若干個(gè)寄存器和存儲(chǔ)器及彼此之間的數(shù)據(jù)、控制與狀態(tài)總線。它與內(nèi)部存儲(chǔ)器和輸入/輸出設(shè)備合稱(chēng)為電子計(jì)算機(jī)的三大核心部件。其功能主要是解釋計(jì)算機(jī)指令以及處理計(jì)算機(jī)軟件中的數(shù)據(jù)。計(jì)算機(jī)的性能在很大程度上由CPU的性能所決定,而CPU的性能主要體現(xiàn)在運(yùn)行程序的速度上。
1.1.2 位和字節(jié)
1.位
位(bit)又稱(chēng)為比特,bit是Binary System的縮寫(xiě)。在現(xiàn)實(shí)應(yīng)用中,位有如下兩個(gè)含義。
(1)它是計(jì)算機(jī)專(zhuān)業(yè)術(shù)語(yǔ),是信息量單位。二進(jìn)制數(shù)的一位所包含的信息就是一位,如二進(jìn)制數(shù)0100就有4位。在計(jì)算機(jī)應(yīng)用中,二進(jìn)制數(shù)“0”和“1”是構(gòu)成信息的最小單位,稱(chēng)作“位”或“比特”。
(2)二進(jìn)制數(shù)字中的位是信息量的度量單位,為信息量的最小單位。數(shù)字化音響用電脈沖表達(dá)音頻信號(hào),“1”代表有脈沖,“0”代表脈沖間隔。如果波形中每個(gè)點(diǎn)的信息用4位一組的編碼來(lái)表示,則每組編碼有4位。位數(shù)越多,表達(dá)的模擬信號(hào)就越精確,對(duì)音頻信號(hào)的還原能力越強(qiáng)。
2.字節(jié)
字節(jié)(Byte),是計(jì)算機(jī)信息技術(shù)中用于存儲(chǔ)容量的一種計(jì)量單位,有時(shí)在一些計(jì)算機(jī)編程語(yǔ)言中也表示數(shù)據(jù)類(lèi)型和語(yǔ)言字符。
在計(jì)算機(jī)應(yīng)用中,由若干位組成1字節(jié)。字節(jié)由多少位組成取決于計(jì)算機(jī)的結(jié)構(gòu)。通常來(lái)說(shuō),微型計(jì)算機(jī)的CPU多由8位組成1字節(jié),并用此表示一個(gè)字符的代碼。構(gòu)成1字節(jié)的8位被看作一個(gè)整體,字節(jié)是存儲(chǔ)信息的基本單位。在大多數(shù)情況下,計(jì)算機(jī)存儲(chǔ)單位的換算關(guān)系如下:
1B=8bit
1KB=1024B
1MB=1024KB
1GB=1024MB
在上述關(guān)系中各個(gè)單位的具體說(shuō)明如下:
B:表示字節(jié)。
bit:表示位。
KB:表示千字節(jié)。
MB:表示兆字節(jié)。
GB:表示吉字節(jié)。
1.1.3 二進(jìn)制
二進(jìn)制是計(jì)算機(jī)技術(shù)中廣泛采用的一種數(shù)制,是使用0和1兩個(gè)數(shù)碼來(lái)表示的數(shù)。二進(jìn)制的基數(shù)為2,進(jìn)位規(guī)則是“逢二進(jìn)一”,借位規(guī)則是“借一當(dāng)二”,這是由18世紀(jì)德國(guó)數(shù)理哲學(xué)大師萊布尼茲發(fā)現(xiàn)的。當(dāng)前的計(jì)算機(jī)系統(tǒng)使用的基本上都是二進(jìn)制系統(tǒng),數(shù)據(jù)在計(jì)算機(jī)中主要是以補(bǔ)碼的形式進(jìn)行存儲(chǔ)的。計(jì)算機(jī)中的二進(jìn)制是一個(gè)非常微小的開(kāi)關(guān),用“開(kāi)”來(lái)表示1,用“關(guān)”來(lái)表示0。因?yàn)樗皇褂?、1兩個(gè)數(shù)字符號(hào),所以非常簡(jiǎn)單方便,易于用電子方式來(lái)實(shí)現(xiàn)。
下面介紹如何將十進(jìn)制數(shù)轉(zhuǎn)換成二進(jìn)制數(shù)。
(1)把正整數(shù)轉(zhuǎn)換成二進(jìn)制。
轉(zhuǎn)換原則是除以2取余,然后倒序排列,高位補(bǔ)零。也就是說(shuō),將正的十進(jìn)制數(shù)除以2,得到的商再除以2,依次類(lèi)推,一直到商為0或1,然后在旁邊標(biāo)出各步的余數(shù),最后倒著寫(xiě)出來(lái),高位補(bǔ)零即可。例如,將十進(jìn)制數(shù)字42轉(zhuǎn)換為二進(jìn)制的步驟為:42除以2得到的余數(shù)連在一起為010101,然后將得到的余數(shù)倒著排一下就會(huì)得到數(shù)字42,所對(duì)應(yīng)的二進(jìn)制數(shù)是101010。但是因?yàn)樵谟?jì)算機(jī)內(nèi)部表示數(shù)的字節(jié)單位是定長(zhǎng)的(如8位、16位或32位),所以當(dāng)位數(shù)不夠時(shí),需要在高位補(bǔ)零。十進(jìn)制數(shù)42轉(zhuǎn)換成二進(jìn)制數(shù)的結(jié)果是101010,它的前面缺少兩位,因此將十進(jìn)制數(shù)42轉(zhuǎn)換成二進(jìn)制數(shù)的最終結(jié)果是:00101010。
(2)把負(fù)整數(shù)轉(zhuǎn)換成二進(jìn)制。
轉(zhuǎn)換原則是先將對(duì)應(yīng)的正整數(shù)轉(zhuǎn)換成二進(jìn)制,最后對(duì)二進(jìn)制數(shù)取反,最后將結(jié)果加1。以十進(jìn)制負(fù)整數(shù)?42為例,將42的二進(jìn)制形式(00101010)取反得到的結(jié)果是11010101,然后再加1的結(jié)果是11010110。所以負(fù)整數(shù)?42轉(zhuǎn)成二進(jìn)制數(shù)的最終結(jié)果是:11010110。
(3)把二進(jìn)制整數(shù)轉(zhuǎn)換成十進(jìn)制。
轉(zhuǎn)換原則是先將二進(jìn)制數(shù)補(bǔ)齊位數(shù)。如果首位是0則代表它是正整數(shù);如果首位是1則代表它是負(fù)整數(shù)。先看首位是0的正整數(shù),補(bǔ)齊位數(shù)以后,得到n×2m的計(jì)算結(jié)果。其中,上標(biāo)m表示二進(jìn)制數(shù)字的位數(shù),n表示二進(jìn)制的某個(gè)位數(shù)。對(duì)于二進(jìn)制數(shù)中的各位分別計(jì)算n×2m,然后將計(jì)算結(jié)果相加得到值的就為十進(jìn)制數(shù)。比如將二進(jìn)制數(shù)1010轉(zhuǎn)換為十進(jìn)制數(shù)的過(guò)程如下。
二進(jìn)制 1 0 1 0
補(bǔ)齊位數(shù) 0 0 0 0 1 0 1 0
計(jì)算n×2m0×27 0×26 0×25 0×24 1×23 0×22 1×21 0×20
計(jì)算結(jié)果 0 0 0 0 8 0 2 0
各位求和結(jié)果 10
所以將二進(jìn)制數(shù)1010轉(zhuǎn)換為十進(jìn)制數(shù)的結(jié)果是10。
如果要轉(zhuǎn)換的二進(jìn)制數(shù)補(bǔ)足位數(shù)后首位為1,那么表示這個(gè)二進(jìn)制數(shù)是負(fù)整數(shù)。此時(shí),就需要先取反,然后再進(jìn)行換算:例如二進(jìn)制數(shù)11101011的首位為1,這時(shí)應(yīng)先取反得到00010100,然后按照上面的計(jì)算過(guò)程得出10100對(duì)應(yīng)的十進(jìn)制數(shù)20,所以二進(jìn)制數(shù)11101011對(duì)應(yīng)的十進(jìn)制數(shù)為?20。
1.1.4 編碼格式
1.ASCII碼
ASCII(American Standard Code for Information Interchange,美國(guó)信息交換標(biāo)準(zhǔn)代碼),是基于拉丁字母的一套計(jì)算機(jī)編碼系統(tǒng),主要用于表示現(xiàn)代英語(yǔ)和其他西歐語(yǔ)言。ASCII碼是現(xiàn)今最通用的單字節(jié)編碼系統(tǒng),并等同于國(guó)際標(biāo)準(zhǔn)ISO/IEC 646。
一個(gè)英文字母(不分大小寫(xiě))占1字節(jié)空間,一個(gè)中文漢字占2字節(jié)空間。一個(gè)二進(jìn)制數(shù)字序列在計(jì)算機(jī)中為一個(gè)數(shù)字單元,一般為8位二進(jìn)制數(shù)。它的最小值為0,最大值為255。例如,一個(gè)ASCII碼就是1字節(jié)。
2.Unicode編碼
Unicode(又稱(chēng)為統(tǒng)一碼、萬(wàn)國(guó)碼、單一碼)是計(jì)算機(jī)科學(xué)領(lǐng)域里的一項(xiàng)業(yè)界標(biāo)準(zhǔn),包括字符集、編碼方案等。Unicode編碼是為了解決傳統(tǒng)字符編碼方案的局限性而產(chǎn)生的,它為每種語(yǔ)言中的每個(gè)字符都設(shè)定了統(tǒng)一并且唯一的二進(jìn)制編碼,以滿足跨語(yǔ)言和跨平臺(tái)進(jìn)行文本轉(zhuǎn)換、處理的要求。
最初Unicode編碼的長(zhǎng)度是固定的16位,也就是2字節(jié)代表一個(gè)字符,這樣可以表示65536個(gè)字符。顯然,若要表示各種語(yǔ)言中的所有字符,這是遠(yuǎn)遠(yuǎn)不夠的。Unicode 4.0規(guī)范考慮到了這種情況,定義了一組附加字符編碼。附加字符編碼采用兩個(gè)16位來(lái)表示,這樣最多可以定義1 048 576個(gè)附加字符。目前,Unicode 4.0規(guī)范只定義了45 960個(gè)附加字符。
Unicode只是一個(gè)編碼規(guī)范。目前實(shí)際實(shí)現(xiàn)的Unicode編碼只要有3種:UTF-8、UCS-2和UTF-16。3種Unicode字符集之間可以按照相關(guān)規(guī)范進(jìn)行轉(zhuǎn)換。
3.UTF-8編碼
UTF-8(8-bit Unicode Transformation Format)是一種針對(duì)Unicode的可變長(zhǎng)度的字符編碼,又稱(chēng)為萬(wàn)國(guó)碼。UTF-8由Ken Thompson于1992年創(chuàng)建,現(xiàn)在已經(jīng)將它標(biāo)準(zhǔn)化為RFC 3629。UTF-8用1~6字節(jié)編碼Unicode字符。在網(wǎng)頁(yè)上它可以統(tǒng)一頁(yè)面顯示中文簡(jiǎn)體/繁體及其他語(yǔ)言(如英文、日文、韓文)。一個(gè)UTF-8編碼的英文字符占用1字節(jié);一個(gè)UTF-8編碼的中文(含繁體)字符少數(shù)情況下占用3字節(jié),多數(shù)情況下占用4字節(jié);一個(gè)UTF-8編碼的數(shù)字占用1字節(jié)。
邊看書(shū)邊聽(tīng)視頻,迅速掌握C編程技術(shù)的指南
內(nèi)容提要
本書(shū)循序漸進(jìn)、由淺入深地講解了C語(yǔ)言開(kāi)發(fā)的技術(shù)。全書(shū)共25章。本書(shū)不僅介紹了C語(yǔ)言的基礎(chǔ)和核心知識(shí)(如開(kāi)發(fā)工具、語(yǔ)法、運(yùn)算符、表達(dá)式、輸入/輸出、流程控制、數(shù)組、字符串、函數(shù)),還講解了C語(yǔ)言中的重點(diǎn)和難點(diǎn)(如指針、結(jié)構(gòu)體、共用體和枚舉、鏈表、位運(yùn)算、預(yù)編譯、文件操作、調(diào)試、內(nèi)存管理、高級(jí)編程技術(shù)、算法、數(shù)據(jù)結(jié)構(gòu)、網(wǎng)絡(luò)編程技術(shù)等)。此外,本書(shū)還通過(guò)4個(gè)綜合實(shí)例,介紹了C語(yǔ)言在綜合項(xiàng)目中的應(yīng)用。全書(shū)內(nèi)容以“技術(shù)解惑”和“范例演練”貫穿全書(shū),引領(lǐng)讀者全面掌握C語(yǔ)言。
本書(shū)不但適用C語(yǔ)言的初學(xué)者,也適合有一定C語(yǔ)言基礎(chǔ)的讀者學(xué)習(xí)。