《鸟哥的Linux 私房菜 基础学习篇(第三版)》——0.3 数据表示方式

简介:

本节书摘来自异步社区《鸟哥的Linux 私房菜 基础学习篇(第三版)》一书中的第0章,第0.3节,作者:鸟哥著,更多章节内容可以访问云栖社区“异步社区”公众号查看

0.3 数据表示方式

鸟哥的Linux 私房菜 基础学习篇(第三版)
事实上我们的计算机只认识0与1,记录的数据也是只能记录0与1而已,所以计算机常用的数据是二进制的。但是我们人类常用的数值运算是十进制,文字方面则有非常多的语言,常用的语言就有英文、中文(又分繁体与简体中文)、日文等。那么计算机如何记录与显示这些数值/文字呢?就得要通过一系列的转换才可以啦!下面我们就来谈谈数值与文字的编码系统。

0.3.1 数字系统
早期的计算机使用的是利用通电与否的特性的真空管,如果通电就是1,没有通电就是0,后来沿用至今,我们称这种只有0/1的环境为二进制,英文称为Binary。所谓的十进制指的是逢十进一位,因此在个位数归为零而十位数写成1。所以所谓的二进制,就是逢二就进一位的意思。

那二进制怎么用呢?我们先以十进制来解释好了。如果以十进制来说,3456的意义为:

screenshot

特别注意:任何数值的零次方为1,所以100的结果就是1。同样,将这个原理带入二进制的环境中,我们来解释一下1101010的数值转为十进制的话,结果如下:

screenshot

这样你了解二进制的意义了吗?二进制是计算机基础中的基础。了解了二进制后,八进位、十六进制就依此类推。那么知道二进制转成十进制后,如果有十进制数值转为二进制的环境时,该如何计算?刚才是乘法,现在则是除法就对了。我们同样使用十进制的106转成二进制来测试一下,如图0-15所示。

screenshot

最后的写法就如同上面的箭头所示,由最后的数字向上写,因此可得到1101010的数字。这些数字的转换系统是非常重要的,因为计算机的加减乘除都是使用这些机制来处理。有兴趣的朋友可以再参考一下其他计算机概论的书籍中关于1的补码/2的补码等运算方式。

0.3.2 文字编码系统
既然计算机都只有记录0/1而已,甚至记录的数据都是使用byte/bit等单位来记录的,那么文字该如何记录啊?事实上文本文件也是被记录为0与1而已,而这个文件的内容要被取出来查阅时,必须要经过一个编码系统的处理才行。所谓的“编码系统”可以想成是一个“字码对照表”,它的概念如图0-16所示。

screenshot

当我们要写入文件的文字数据时,该文字数据会由编码对照表将该文字转成数字后,再存入文件当中。同样,当我们要将文件内容的数据读出时,也会经过编码对照表将该数字转成对应的文字后再显示到屏幕上。现在你知道为何浏览器上面如果编码写错时会出现乱码了吗?这是因为编码对照表写错,导致对照的文字产生误差之故。

常用的英文编码表为ASCII系统,这个编码系统中,每个符号(英文、数字或符号等)都会占用1B的记录,因此总共会有28=256种变化。至于中文当中的编码系统,目前最常用的就是big5(简体则是gb2312)这个编码表了。每个中文字会占用2B,理论上最多可以有2的16次方=65536,即最多可达6万多个中文字。但是因为big5编码系统并非将所有的位都拿来运用成为对照,所以并非可显示这么多的中文字码的。目前big5仅定义了一万三千多个中文字,很多繁体中文利用big5是无法成功显示的,所以才会有造字程序之说。

big5码的中文编码对于某些数据库系统来说是很有问题的,某些字码例如“许、盖、功”等字,由于这几个字的内部编码会被误判为单/双引号,写入时还不成问题,在读出数据的对照表时,经常就会变成乱码。不只中文字,其他非英语系国家也常常会有这样的问题出现。

为了解决这个问题,由国际组织ISO/IEC制订了所谓的Unicode编码系统,即我们常常称呼的UTF8或统一码。因为这个编码系统打破了所有国家的不同编码,因此目前应用较多所以各位亲爱的朋友,记得将你的编码系统修订一下。

相关文章
|
12天前
|
存储 缓存 Linux
Linux IO的奥秘:深入探索数据流动的魔法
Linux I/O(输入/输出)系统是其核心功能之一,负责处理数据在系统内部及与外界之间的流动。为了优化这一流程,Linux进行了一系列努力和抽象化,以提高效率、灵活性和易用性。🚀
Linux IO的奥秘:深入探索数据流动的魔法
|
28天前
|
存储 Shell Linux
【Shell 命令集合 磁盘管理 】Linux读取、转换并输出数据 dd命令使用教程
【Shell 命令集合 磁盘管理 】Linux读取、转换并输出数据 dd命令使用教程
31 0
|
1月前
|
Ubuntu 安全 Unix
【Linux学习】零基础学习Linux
【Linux学习】零基础学习Linux
|
1月前
|
监控 网络协议 Java
Linux 网络编程从入门到进阶 学习指南
在上一篇文章中,我们探讨了 Linux 系统编程的诸多基础构件,包括文件操作、进程管理和线程同步等,接下来,我们将视野扩展到网络世界。在这个新篇章里,我们要让应用跳出单机限制,学会在网络上跨机器交流信息。
Linux 网络编程从入门到进阶 学习指南
|
1月前
|
Ubuntu Unix 大数据
为什么要学习 Linux ????
为什么要学习 Linux ????
30 0
|
1月前
|
存储 弹性计算 人工智能
|
2月前
|
Linux Shell 数据安全/隐私保护
【Linux】基础学习篇三:用户与权限(持续更新)
【Linux】基础学习篇三:用户与权限(持续更新)
|
28天前
|
算法 Shell Linux
【Shell 命令集合 备份压缩 】⭐Linux 压缩 恢复bzip2损坏数据 bzip2recover命令 使用指南
【Shell 命令集合 备份压缩 】⭐Linux 压缩 恢复bzip2损坏数据 bzip2recover命令 使用指南
31 0
|
1月前
|
Linux 编译器 开发工具
Linux学习第二枪(yum,vim,g++/gcc,makefile的使用)
Linux学习第二枪(yum,vim,g++/gcc,makefile的使用)
|
2月前
|
Linux
【Linux】基础学习篇一:Linux初始设置(持续更新)
【Linux】基础学习篇一:Linux初始设置(持续更新)