一文讲透计算机数据基础(深度好文)

为什么叫计算机

计算机就是能够计算的机器,既然是计算,那就是计算数字,一切的我们看到的各种计算机相关的东西,最终都是转换成数字来做。这篇文件会讲到关于计算机相关的CPU、内存、显示器、硬盘这几个的关于数据的运行原理。码字不易,先来一波三连吧。

为什么叫数据

一个数字叫数字,两个数字还是叫数字,n个数字叫数据。什么是数据呢?一个字符串是数据,2个字符串也是数据,n个字符串也是数据。视频是数据,音频是数据,图片是数据,文件是数据,一切的文件都是数据。不同的是,文件的数据格式不同,文件格式不同,写文件格式的软件不同,读文件的软件不同,展示和操作文件的格式不同。

字符串与 ASCII 表示

计算机本质上只能处理数字,那么像 abc 这样的字符串是如何存储的呢?答案是用数字编码。最常见的一种编码方式是 ASCII码(American Standard Code for Information Interchange),它为每个字符分配一个唯一的数字。例如,小写字母 a 的 ASCII 值是 97,b 是 98,c 是 99。因此,字符串 "abc" 在计算机中会被表示为一串数字 [97, 98, 99]。当计算机需要显示它时,会把这些数字再翻译回字母,最终呈现出我们看到的 abc。这就是"字符数字化"的基本原理。

二进制与进制转换

计算机世界里没有 2、3、4......只有 0 和 1。这是因为底层电子元件只有通电与断电两种状态。数字 97(字母 a 的 ASCII 值)在二进制中就是 1100001。同样,字符串 "abc" 的存储方式是 [1100001, 1100010, 1100011]。理解二进制是理解计算机数据原理的第一步。

存储单位与数据大小

计算机中的一切数据都是由 0 和 1 组成的。最小的存储单位是 位(bit) ,每个 0 或 1 就是一个位。为了方便管理,计算机把 8 个位组合成一个更大的单位,叫做 字节(Byte) ,简称 B 。一个字母 a 的二进制码需要 1 个字节来存储。

当数据越来越多时,我们需要更大的单位:

  • 1KB = 1024B
  • 1MB = 1024KB
  • 1GB = 1024MB
  • 1TB = 1024GB

为什么是 1024 而不是 1000?因为计算机使用二进制,1024 恰好是 2 的 10 次方。这样,电影、音乐、图片等文件的大小才能被清晰地描述和管理。

CPU

CPU 有寄存器,寄存器用来存数据的,然后拿去给运行单元运算。一个寄存器可以存32位,即4字节的数据。这就是为什么C语言的int刚好是32位,编译成汇编代码就是一个int放入一个寄存器。一个CPU有很多个寄存器,还有多个核,还有高速缓存等,总之最简单的原理就是寄存器和运算了。这样编程的加减乘除靠的是寄存器和运算单元。还有一个JMP指令,程序的循环还有函数,全靠这个做支持,有了这个东西,就可以在4GB的内存上跳来跳去。基本上C语言,就能实现了,C语言是转成汇编语言了,可以了解一下汇编的基础语法,计算机基础导论教的就是我讲的这个,懂这个原理对理解计算机有很大的帮助。

内存

为什么需要内存呢?因为CPU很快,硬盘很慢,硬盘可以存很多数据,但是像乌龟在爬,内存相当于中间件,是个兔子,跑的很快,CPU主要跟内存打交道,打开软件的时候,都是先把数据在硬盘加载到内容,然后才进行运算处理的,这个过程是批量加载,具体都有各自的实现原理,有需要自己再深入了解。

硬盘

硬盘其实和内存一样,都是一个很长的数据格子,比如1TB就是1TB那么长,还可以想象成为一个立体的仓库,空间是1TB。通常我们硬盘有分区,格式化,用立体来理解就是一个办公楼有1楼,2楼,3楼。原理是一样的。都是数据格式,按约定的格式来读写。硬盘里用的是驱动来读写,硬盘上面跑的是操作系统和文件系统,还有系统调用接口函数,如fopen,其实都是系统成实现好了,你直接用就可以,里面的过程不用理。一个文件,其实也是连续的数据个字,比如1KB,你可以讲里面的数据一个一个读出来,想怎么读写就怎么读写。其实就是俄罗斯套娃,没什么新花样,一层套一层。

显示器

显示器也简单,还是数据,屏幕实际上就是一些二维的点组成的,比如分辨率1920*1680,他就是这个方便分辨率相乘的结果那么长的数据,每个点存4字节的数据,有多长自己计算一下就知道了。显示原理也简单,就是实时不断往显示器的内存区写数据,要显示什么,可以是绘制好的数据,也可以是图片数据,无法是通过简单复杂的程序,绘制出图像的信息,在转到显示器区显示。懂这个的话,图片的原理,视频的原理,界面的原理,动画引擎,游戏引擎,浏览器引擎等等,都是这个原理。没有什么新花样,各自的实现和规则不同而已。

数据结构

数据结构就是一段数据千变万化的各种结构和运用规则,文件数据格式同理。数据本身是数字、字符或二进制,但当我们要存储、查找、排序或处理这些数据时,就需要一种结构来管理它。简单来说,数据结构是"数据的排列方式"和"操作规则"的集合。

举几个例子:

  • 数组(Array):数据按顺序排列,每个数据都有固定编号(索引),方便快速访问。
  • 链表(Linked List):数据分散存储,每个数据都指向下一个数据,方便插入和删除。
  • 栈(Stack):先进后出,像一摞盘子,只能从顶端操作。
  • 队列(Queue):先进先出,像排队买票,从前面取数据,从后面加入数据。
  • 树(Tree):数据呈分支状组织,每个节点可以有子节点,用于表示层级关系或快速查找。
  • 图(Graph):数据和数据之间有复杂关系,用于表示网络、地图或社交关系等。

不同的数据结构适合不同的应用场景。算法在这些结构上运行,才能高效处理数据。比如搜索、排序、路径规划、资源调度等,都是建立在合理的数据结构之上的。可以说,理解数据结构就是理解数据千变万化的组织方式和运用规则,是计算机科学的核心基础之一。

网络与数据传输

计算机不仅处理内部数据,也需要和其他计算机交换信息。这就需要网络。网络中的数据也是由 0 和 1 组成,只不过这些数据被分成一个个小包(Packet)在网络中传输。每个包里有数据内容,还有来源和目的地址,就像邮寄信件一样。

当你发一条消息或打开网页,计算机会把数据拆分成小包,通过网线、光纤或者无线信号发送到另一台计算机,接收方再把小包组装回原来的信息。为了保证数据完整,网络协议会校验每个包是否丢失或出错,如果丢失就重新发送。

网络传输速度有快有慢,影响因素包括带宽、延迟和网络拥堵。理解数据在网络中传输的原理,有助于理解网页加载、视频播放、游戏联机等现象背后的本质:所有数据都是数字,按规则搬运到目的地,然后再翻译成我们能理解的内容。

数据压缩与编码

计算机中的数据可以非常庞大,比如一部电影可能有几十 GB。为了节省存储空间和传输时间,就需要压缩。压缩的原理是把重复或不必要的数据用更短的方式表示,例如,把连续的相同字符 "AAAAAA" 用 "6A" 表示。

不同类型的数据有不同的压缩方式:文本可以用字符编码优化,图片可以用 JPEG 压缩,音频和视频可以用 MP3、H.264 等算法。压缩既能减小体积,也可以加快传输速度。

编码则是把数据按一定规则转换成计算机能理解的格式。例如,文字用 ASCII 或 UTF-8 编码,图片用 BMP、PNG 编码,视频用 MP4 编码。正确的编码和解码保证了数据传输和存储的正确性。

简单理解:压缩是让数据更小,编码是让数据更规范、可读、可处理。掌握这两个概念,可以更好理解文件存储和网络传输的效率。

键盘、鼠标、手指触摸

键盘就是对应的键按下,系统就接受到应该信号数据,然后我们编程对这个数据进行监听,触发相应的操作,每个键有对应的字,通过重复的数据和监听,配合显示器的显示,就完成的数据。鼠标懂了显示器原理,实际上鼠标就是在屏幕绘制出鼠标,监听鼠标的相对移动,点击操作的,和键盘原理一样。手指触碰等其实原理也是相同的,就是硬件不同而已。

好了,今天给大家讲的就到这里,我是老虎,一个老龄创业程序员,我做了一个编程学习网站,叫好酷网,里面有技术博客,要写博客可以来找我,还有代码可视化工具,开发者路线图,以及程序员相关的工具。我还有在免费指导学生学编程,有兴趣的可以找我交流,当然也准备做一个付费的,带学员做项目,想做什么项目就做什么项目。