视频网址:http://open.163.com/special/opencourse/cs50.html
1. 数据在计算机中的表示与存储
日常生活中用的是10进制数,如:
位 | 3 | 2 | 1 | 0 |
权重 | 10^3 | 10^2 | 10^1 | 10^0 |
数值 | 0 | 1 | 2 | 3 |
如上表所示数值123在十进制下是这样表示的,即 3*10^0 + 2*10^1 + 1*10^2 = 123
对于二进制,如数字7,则如下表所示:即 1*2^0 + 1*2^1 + 1*2^2 = 7
位 | 3 | 2 | 1 | 0 |
权重 | 2^3 | 2^2 | 2^1 | 2^0 |
数值 | 0 | 1 | 1 | 1 |
二进制中每一个位都只能是0或者1,这样的每一个位称作bit。可以看到位的计数序号正好与权重的指数相同,这也解释了为什么计算机中通常从0开始计数。
2. 字符的表示:ASCII
ASCII 是一个表格,指定了每个美式键盘上的字符的编码,一共128个,从0-127,包括空格,标点等。比如大写的A用十进制的数字65表示。用编辑器写的程序代码文件比如: std::cout << "Hello World!" << std::endl; 也是逐个字符变为ASCII码存储在硬盘上。
字节:Byte。一个Byte是8个bit,因为8个bit可以表示ASCII码中所有的十进制数字,0-127
3. 数据的存储与读写等操作
(1)数据存储:硬盘是永久存储数据的设备。硬盘中有许多有序排列的磁性粒子,它们如同磁铁一样有两种极性,正好可以用来表示二进制的0与1,一个磁性粒子表示一个bit。这也是为什么计算机采用二进制的原因。如果计算机有别的更好的存储介质,可能就不用二进制了。读写头与硬盘表面接触,硬盘旋转(非固态硬盘)。
(2)数据读写:向硬盘写入数据时,读写头通过电信号改变与它接触的磁性粒子极性,即写入0或1的值。硬盘不断旋转,读写头完成指定位置的所有磁性粒子的操作。从硬盘读取数据时,读写头获取每个指定磁性粒子的极性。对于非固态硬盘,硬盘的旋转速度决定了读写速度。
(3)格式化:格式化只是消除了硬盘中所存储的数据的前几个字节,使计算机找不到在硬盘上存储的文件。(意思是消除了文件的地址!) 但其余旧的数据依然存在于硬盘上并未消除!计算机就当做硬盘上什么数据都没有然后在使用中可以重新写入新数据,这样就覆盖了旧数据。因此有恢复误删除数据的方法。
(4)整理硬盘碎片:在实际使用中,计算机在硬盘中依次写入不同的数据块,但有些数据块可能后来被删除,这样就空余了一部分可以利用的磁性粒子,与其它可利用的磁性粒子物理上并不连续。为了提高利用率,操作系统可以将同一个文件分块存储在硬盘上不连续的位置,需要读取时通过不同文件块的地址分别读取,但这使得文件读写速度慢。通常计算机性能比较好的时候这样的速度变慢可以忽略不计。