序
讀這一系列文章不能讓你成為掌握C語言的專家鸟廓,但它可以幫你對(duì)C語言形成一個(gè)初步的印象,輕松地上手寫一些小程序引谜。
在正式開始之前员咽,我忽然想起同學(xué)曾經(jīng)問過我的問題”词遥“C語言到底能干什么?”對(duì)于寫過C程序的人來說這也許不是問題捡偏,但是考慮到我是寫給不熟悉編程的孩紙看的峡迷,所以我還是應(yīng)該回答一下,或許有點(diǎn)幫助彤避。
C語言能干什么
C語言編寫的程序廣泛存在于各個(gè)領(lǐng)域夯辖,底層如硬件驅(qū)動(dòng),操作系統(tǒng)的內(nèi)核楼雹,高層到我們平時(shí)用的辦公軟件尖阔、游戲,但它涉及的操作其實(shí)挺簡(jiǎn)單:
- 分配存儲(chǔ)空間
- 從存儲(chǔ)空間中讀數(shù)據(jù)
- 數(shù)學(xué)運(yùn)算
- 向存儲(chǔ)空間寫入數(shù)據(jù)
- 根據(jù)數(shù)據(jù)的值控制程序的運(yùn)行
以上基本是它的全部功能了谴供。你可能覺得齿坷,這看起來好像只能計(jì)算數(shù)學(xué)問題,離實(shí)際生活有點(diǎn)遠(yuǎn)崎场。這句話只說對(duì)了一半遂蛀,它確實(shí)只能解決數(shù)學(xué)問題,但是生活中的問題大多可以變成數(shù)學(xué)問題螃宙。正因如此,計(jì)算機(jī)才能對(duì)現(xiàn)在的世界產(chǎn)生如此深遠(yuǎn)的改變谆扎。
對(duì)于計(jì)算機(jī)來說,所有的東西都是數(shù)字闲先,而人類必須要把現(xiàn)實(shí)問題轉(zhuǎn)化為數(shù)學(xué)問題苗缩,才能交給計(jì)算機(jī)來解決。
那么你現(xiàn)在可能會(huì)關(guān)心退盯,生活中的問題都是怎么轉(zhuǎn)化成數(shù)學(xué)問題了呢泻肯?舉個(gè)例子吧,如果我們用電腦看電影琉朽,那么電影本身要以數(shù)字的形式存在稚铣。由于人眼的視覺暫留特性,一秒只需要播放24幀以上的畫面就足以產(chǎn)生連續(xù)變化的場(chǎng)景惕医。因此抬伺,電影實(shí)際上是一系列的圖片數(shù)據(jù),這個(gè)過程叫做離散化峡钓。
如果是2個(gè)小時(shí)的電影,每秒24幀寞宫,就有86,400張圖片拉鹃。如果電影的分辨率是1920*1080统锤,那么每張圖片都有2,073,600個(gè)像素炭庙。每個(gè)像素的顏色信息包含4個(gè)通道,分別是紅(Red)綠(Green)藍(lán)(Blue)和透明度(Alpha)逾雄,各自都是0到255的整數(shù)腻脏。每個(gè)整數(shù)占用1個(gè)字節(jié)[1],一個(gè)像素就占用了4個(gè)字節(jié)做鹰。最終鼎姐,一部電影的視頻信息就完全轉(zhuǎn)化為了數(shù)字,一共占據(jù)大約716GB的空間饭尝。同樣地献宫,聲音也通過某種標(biāo)準(zhǔn)轉(zhuǎn)化為了數(shù)字。
為了存儲(chǔ)和傳輸這樣巨大的數(shù)據(jù)量姊途,人們開發(fā)出了各種壓縮算法捷兰,以減少相同信息的重復(fù)次數(shù)。這里涉及到了很多復(fù)雜的數(shù)學(xué)和技術(shù)原理寂殉,就不再深入了原在。因?yàn)檫@樣的算法庶柿,我們能在網(wǎng)上看高清的影片。順便說句浮庐,不同的壓縮方法帶來了不同的編碼格式柬焕,也體現(xiàn)在文件的格式上梭域,例如avi病涨、rmvb、mp4等等既穆。隨著技術(shù)的進(jìn)步,舊的算法被新的取代励两,現(xiàn)在已經(jīng)很少看到avi或者rmvb格式的視頻了啊囊颅。
然后就是看電影的部分了。對(duì)于轉(zhuǎn)化為了數(shù)字的電影先鱼,把它展現(xiàn)在屏幕上同樣也變成了數(shù)學(xué)問題奸鬓!讓我們考慮一下,為了播放電影宏多,涉及的操作有哪些:
- 從硬盤中讀取影片的數(shù)據(jù)(2)
- 用數(shù)學(xué)運(yùn)算將壓縮后的內(nèi)容還原為原始的信息(3)
- 在把數(shù)據(jù)寫入到顯卡和聲卡的緩沖區(qū)中用于播放(4)
- 在整個(gè)過程中澡罚,要不停地進(jìn)行數(shù)學(xué)運(yùn)算,控制播放進(jìn)度(5)
- 整個(gè)過程中我們需要借用內(nèi)存空間來作為數(shù)據(jù)的中轉(zhuǎn)站(1)
括號(hào)中的數(shù)字表明這是C語言中的哪些操作更胖,既然這些都能做到了隔显,至少我們可以得出一個(gè)結(jié)論。
C語言可以用來寫視頻播放器彪标。
當(dāng)然了掷豺,你一定已經(jīng)想到,只要人類能夠把問題用計(jì)算機(jī)的語言描述出來默辨,就能夠用編程的方式給出一個(gè)解決方案婴程。這些基本操作的組合,最終竟為我們帶來了千變?nèi)f化的不可思議的功能桌粉。
不過這些功能不是C語言所獨(dú)有的衙四,其他的編程語言也能做到传蹈。那它們有哪些區(qū)別呢?就不是這一篇文章的內(nèi)容了惦界,留待以后再討論吧。
小尾巴
總之漂彤,雖然說是討論C語言能做什么灾搏,但是這一段好像完全在討論現(xiàn)實(shí)問題的數(shù)字化了。雖然完全不管這些內(nèi)容也能立刻開始寫程序媳板,但是知道我們究竟做的是一件什么事情泉哈,背后有怎樣的思想,我覺得比解決一兩個(gè)小問題來的有意義呢奕纫。
那么下一篇再見啦采呐。
-
一個(gè)字節(jié)(Byte)相當(dāng)于8個(gè)二進(jìn)制位搁骑,可以表達(dá)0-255的256個(gè)整數(shù)又固,我們所熟悉的KB仰冠,MB分別指1,000字節(jié)和1,000,000字節(jié) ?