序
讀這一系列文章不能讓你成為掌握C語言的專家,但它可以幫你對C語言形成一個初步的印象,輕松地上手寫一些小程序。
在正式開始之前,我忽然想起同學曾經問過我的問題?!癈語言到底能干什么?”對于寫過C程序的人來說這也許不是問題,但是考慮到我是寫給不熟悉編程的孩紙看的,所以我還是應該回答一下,或許有點幫助。
C語言能干什么
C語言編寫的程序廣泛存在于各個領域,底層如硬件驅動,操作系統的內核,高層到我們平時用的辦公軟件、游戲,但它涉及的操作其實挺簡單:
- 分配存儲空間
- 從存儲空間中讀數據
- 數學運算
- 向存儲空間寫入數據
- 根據數據的值控制程序的運行
以上基本是它的全部功能了。你可能覺得,這看起來好像只能計算數學問題,離實際生活有點遠。這句話只說對了一半,它確實只能解決數學問題,但是生活中的問題大多可以變成數學問題。正因如此,計算機才能對現在的世界產生如此深遠的改變。
對于計算機來說,所有的東西都是數字,而人類必須要把現實問題轉化為數學問題,才能交給計算機來解決。
那么你現在可能會關心,生活中的問題都是怎么轉化成數學問題了呢?舉個例子吧,如果我們用電腦看電影,那么電影本身要以數字的形式存在。由于人眼的視覺暫留特性,一秒只需要播放24幀以上的畫面就足以產生連續(xù)變化的場景。因此,電影實際上是一系列的圖片數據,這個過程叫做離散化。
如果是2個小時的電影,每秒24幀,就有86,400張圖片。如果電影的分辨率是1920*1080,那么每張圖片都有2,073,600個像素。每個像素的顏色信息包含4個通道,分別是紅(Red)綠(Green)藍(Blue)和透明度(Alpha),各自都是0到255的整數。每個整數占用1個字節(jié)[1],一個像素就占用了4個字節(jié)。最終,一部電影的視頻信息就完全轉化為了數字,一共占據大約716GB的空間。同樣地,聲音也通過某種標準轉化為了數字。
為了存儲和傳輸這樣巨大的數據量,人們開發(fā)出了各種壓縮算法,以減少相同信息的重復次數。這里涉及到了很多復雜的數學和技術原理,就不再深入了。因為這樣的算法,我們能在網上看高清的影片。順便說句,不同的壓縮方法帶來了不同的編碼格式,也體現在文件的格式上,例如avi、rmvb、mp4等等。隨著技術的進步,舊的算法被新的取代,現在已經很少看到avi或者rmvb格式的視頻了啊。
然后就是看電影的部分了。對于轉化為了數字的電影,把它展現在屏幕上同樣也變成了數學問題!讓我們考慮一下,為了播放電影,涉及的操作有哪些:
- 從硬盤中讀取影片的數據(2)
- 用數學運算將壓縮后的內容還原為原始的信息(3)
- 在把數據寫入到顯卡和聲卡的緩沖區(qū)中用于播放(4)
- 在整個過程中,要不停地進行數學運算,控制播放進度(5)
- 整個過程中我們需要借用內存空間來作為數據的中轉站(1)
括號中的數字表明這是C語言中的哪些操作,既然這些都能做到了,至少我們可以得出一個結論。
C語言可以用來寫視頻播放器。
當然了,你一定已經想到,只要人類能夠把問題用計算機的語言描述出來,就能夠用編程的方式給出一個解決方案。這些基本操作的組合,最終竟為我們帶來了千變萬化的不可思議的功能。
不過這些功能不是C語言所獨有的,其他的編程語言也能做到。那它們有哪些區(qū)別呢?就不是這一篇文章的內容了,留待以后再討論吧。
小尾巴
總之,雖然說是討論C語言能做什么,但是這一段好像完全在討論現實問題的數字化了。雖然完全不管這些內容也能立刻開始寫程序,但是知道我們究竟做的是一件什么事情,背后有怎樣的思想,我覺得比解決一兩個小問題來的有意義呢。
那么下一篇再見啦。
-
一個字節(jié)(Byte)相當于8個二進制位,可以表達0-255的256個整數,我們所熟悉的KB,MB分別指1,000字節(jié)和1,000,000字節(jié) ?