我开发了一个基于 Beancount 的账本托管服务 HostedBeans,欢迎大家来了解纯文本复式记账并试用我的服务。
查看源代码

C++ 讲稿 3.计算机如何储存数据

By 精英王子

CC-BY-NC-SA(署名-非商业性使用-以相同方式共享) 3.0

注:解说在图片下方

原始幻灯片(持续更新):https://docs.google.com/presentation/d/1-9F3hQxXXlFk_ftLbh5C1gKnKcw–tnODPcD40TEg7g/edit

解说写在讲者备注

1

左下角,我们平时能够看到每个文件都有一个数字来表示他们的体积,数字后面还有各种不同的单位。

这节课我们就来了解计算机如何储存数据,这一节并不限于C++,所有的计算机、编程语言都是这么做的。

2

位是表示数据最基础的单位,他就像一个开关,只能表示两种状态之一,计算机很喜欢这种表示方法。

一个位只能表示两种状态之一,但通过将多个位组合在一起,即可表示更多种状态之一。

计算机通过将多个位(通常是几百万、上千万)通过一定结构,组合在一起,来表示数据。因此计算机以二进制为基础。

3

二进制数有很多特殊的性质,例如0.1在十进制中是有限小数,而在二进制中是无限小数。

十六进制数保留有二进制数的性质(因为十六是二的整数次幂),而且表示起来比二进制简短,所以有时我们也使用十六进制。

为了不至于把二进制、十进制、十六进制搞混,我们在书写的时候通常会在二进制数后加B作为后缀,在十六进制数前加0x作为前缀,十进制数原样书写。

或者用下标来表示进制。

4

所谓浮点数就是说小数点的位置是可以改变的,通过修改指数的大小,即可改变小数点的位置。

通过科学计数法,一个小数被划分为三个部分,它们都是整数,所以我们可以按照之前提到的储存整数的方法进行储存。

5

6

通过前面的介绍,可以得出这样的结论,计算机本质上储存的是数字,二进制数字。

所以如果想让计算机储存文字,必须指定一种从数字的字符的转换方法。

在ASCII中,每个字符对应一个二进制数字,通过储存这些数字即可表示这些字符。

特殊字符即各种无法直接显示在屏幕上的字符,如回车、换行等。

7

GB18030收录了7万多个汉字,自然无法用一个字节表示 (一个字节只能表示255个字符之一),所以我们需要用多个字节来表示一个汉字,所以GB18030属于多字节字符集。

同一个数字,在不同的字符集里面可能会表示不同的字符,将一个本来是GB18030(中文)编码的文件以日文字符集打开,就会看到日文字符,但这并不是翻译,而是乱码。

在一个使用GB18030(中文)编码的文件中,你无法插入日文字符,因为GB18030是中文字符集,其中没有日文字符。

为了解决这种混乱,成立一个叫Unicode的项目,他们指定了一组字符集,收录了世界上所有文字的字符。其中包括比较常用的UTF-8字符集。

8

我们时常在单位的前面加上一个前缀(“国际单位制词头”)来对单位放大或缩小一定的倍数。

对计算机中的字节也是一样,我们用1kB表示1000B,用1MB表示1000KB.

发现问题了么?你一定听说过计算机使用2的10次方——1024来进行进位。但是物理学早就规定k表示1000倍,

于是,大家又创建了一组新的词头:Ki、Mi、Gi等,他们以1024来进位而不是1000.

9

在大多数情况下,KiB、MiB中的i会被省略,甚至大多数人都不知道还有个i,有些软件也直接省略了i,但也有一些软件将i完整地写了出来。

10

11

撰写评论

如希望撰写评论,请发邮件至 jysperm@gmail.com 并注明文章标题,我会挑选对读者有价值的评论附加到文章末尾。

精子生于 1995 年,英文 ID jysperm.

订阅推送

通过 Telegram Channel 订阅我的博客日志、产品和项目的动态:

王子亭的博客 @ Telegram


通过邮件订阅订阅我的博客日志、产品和项目的动态(历史邮件):

该博客使用基于  Hexo  的  simpleblock  主题。博客内容使用  CC BY-NC-ND  授权发布。最后生成于 2024-04-08.