C·Quickstart(一 现实问题的数字化)
序
读这一系列文章不能让你成为掌握C语言的专家,但它可以帮你对C语言形成一个初步的印象,轻松地上手写一些小程序。
在正式开始之前,我忽然想起同学曾经问过我的问题。“C语言到底能干什么?”对于写过C程序的人来说这也许不是问题,但是考虑到我是写给不熟悉编程的孩纸看的,所以我还是应该回答一下,或许有点帮助。
C语言能干什么
C语言编写的程序广泛存在于各个领域,底层如硬件驱动,操作系统的内核,高层到我们平时用的办公软件、游戏,但它涉及的操作其实挺简单:
- 分配存储空间
- 从存储空间中读数据
- 数学运算
- 向存储空间写入数据
- 根据数据的值控制程序的运行
以上基本是它的全部功能了。你可能觉得,这看起来好像只能计算数学问题,离实际生活有点远。这句话只说对了一半,它确实只能解决数学问题,但是生活中的问题大多可以变成数学问题。正因如此,计算机才能对现在的世界产生如此深远的改变。
对于计算机来说,所有的东西都是数字,而人类必须要把现实问题转化为数学问题,才能交给计算机来解决。
那么你现在可能会关心,生活中的问题都是怎么转化成数学问题了呢?举个例子吧,如果我们用电脑看电影,那么电影本身要以数字的形式存在。由于人眼的视觉暂留特性,一秒只需要播放24帧以上的画面就足以产生连续变化的场景。因此,电影实际上是一系列的图片数据,这个过程叫做离散化。
如果是2个小时的电影,每秒24帧,就有86,400张图片。如果电影的分辨率是1920*1080,那么每张图片都有2,073,600个像素。每个像素的颜色信息包含4个通道,分别是红(Red)绿(Green)蓝(Blue)和透明度(Alpha),各自都是0到255的整数。每个整数占用1个字节[1],一个像素就占用了4个字节。最终,一部电影的视频信息就完全转化为了数字,一共占据大约716GB的空间。同样地,声音也通过某种标准转化为了数字。
为了存储和传输这样巨大的数据量,人们开发出了各种压缩算法,以减少相同信息的重复次数。这里涉及到了很多复杂的数学和技术原理,就不再深入了。因为这样的算法,我们能在网上看高清的影片。顺便说句,不同的压缩方法带来了不同的编码格式,也体现在文件的格式上,例如avi、rmvb、mp4等等。随着技术的进步,旧的算法被新的取代,现在已经很少看到avi或者rmvb格式的视频了啊。
然后就是看电影的部分了。对于转化为了数字的电影,把它展现在屏幕上同样也变成了数学问题!让我们考虑一下,为了播放电影,涉及的操作有哪些:
- 从硬盘中读取影片的数据(2)
- 用数学运算将压缩后的内容还原为原始的信息(3)
- 在把数据写入到显卡和声卡的缓冲区中用于播放(4)
- 在整个过程中,要不停地进行数学运算,控制播放进度(5)
- 整个过程中我们需要借用内存空间来作为数据的中转站(1)
括号中的数字表明这是C语言中的哪些操作,既然这些都能做到了,至少我们可以得出一个结论。
C语言可以用来写视频播放器。
当然了,你一定已经想到,只要人类能够把问题用计算机的语言描述出来,就能够用编程的方式给出一个解决方案。这些基本操作的组合,最终竟为我们带来了千变万化的不可思议的功能。
不过这些功能不是C语言所独有的,其他的编程语言也能做到。那它们有哪些区别呢?就不是这一篇文章的内容了,留待以后再讨论吧。
小尾巴
总之,虽然说是讨论C语言能做什么,但是这一段好像完全在讨论现实问题的数字化了。虽然完全不管这些内容也能立刻开始写程序,但是知道我们究竟做的是一件什么事情,背后有怎样的思想,我觉得比解决一两个小问题来的有意义呢。
那么下一篇再见啦。
-
一个字节(Byte)相当于8个二进制位,可以表达0-255的256个整数,我们所熟悉的KB,MB分别指1,000字节和1,000,000字节 ↩