终于,经过几天的调试修改,我解决了章节页面的排序问题,可以进行进一步的讲解了,本节我将和大家探讨关于计算机的一些基本的问题,废话不多说,Let’s go !

什么是计算机?

  计算机技术已经进入了我们生活的方方面面,我们现代生活的一切都是建立在计算机技术衍生的设备之上的:从早上叫醒你的电子闹钟或者手机,再到上学上班路上的车载设备,或是签到时候的打卡机,或是你上班上课时偷偷打游戏,聊天,刷新社交媒体的电脑或者手机,再到你正在浏览这个项目的设备。

  那么到底什么是计算机呢?

  由于计算机是舶来品,我们要想更直接的了解它,就是通过它诞生的地区的语言,在英语中计算机写作 computer ,英文词典对computer 的解释是:

an electronic device for storing and processing data, typically in binary form, according to instructions given to it in a variable program.

大意就是一种以二进制形式根据可变程序指令 存储和处理数据的一种电子设备。

  这么一解释,是不是一下子就懂了呢,都是汉字,一看就懂,是吧~

  那……..你给我用自己的语言复述一下吧.…..

  ……………………………………….

说啊,你倒是说啊!!!行了行了,我知道你没看明白,能看明白就怪了~

  怎么了你还委屈上了??

  行了,行了,别委屈了,我给你讲还不行么…….

只懂 0 和 1 的机器

  上面的提到了计算机以二进制形式工作,那么什么是二进制呢?

  简单来说,二进制就是一种计数方法,就和我们平常用的十进制类似。

  在十进制中,我们有0 - 9 这十个基本数字,计数的时候从 1 开始,每满 10 就向前进一位。同理,二进制只有 0 和 1这两个数字,每满 2 就向前进一位。

  可能你听到这里还是一头雾水,所以我要和大家闲聊一会了,说一说我学习二进制的时候:在我刚开始接触电脑的时候是不了解二进制的,甚至在我开始学习 VB 的时候,我也不是很理解二进制,当然,我现在也懒的算二进制。实际上,在大多数情况下,我们是不需要自己计算二进制的,因为我们有计算器这个好帮手,所以在这里我也只是给大家讲讲基本的二进制知识,我个人觉得,没必要在练习进制换算之间浪费太多时间。当然这只代表我个人观点

  好了我们言归正传,继续说一说二进制,下面我将通过几个换算给大家展示二进制的原理:

  比如,我们在十进制中用 0 来表示没有某种东西,在二进制中我们也用 0 。当我们用十进制表示 1 的时候,1 小于 2,所以我们不需要考虑进位的事情,所以十进制的 1 在二进制中还是 1 (要注意的是,这里的 0 和 1 无论是二进制还是十进制中,都只是表示 0 个和 1 个,而不是 101 , 12013这样的数在某一位的 0 和 1 )。当我们在十进制中表示 2 的时候,二进制中已经满 2 了,要进位了,(这很容易理解:二进制中 1 是某一位的最大值,超过1就要进位,就好比十进制中 9 是某一位的最大值一样,在十进制中,我们也没有单个数字表示”十“)所以十进制的 2 在二进制中表示为 10 (这并不读作”十“,而是”一“ ”零“),由此十进制的 3 在二进制中就是 11 ,十进制中的 4 在二进制中就是 100 了,十进制的 5 对应二进制 101 ,6 对应 110 , 7 对应 111 ….依次类推。

  到这里,你就已经学会了二进制的基本原理了,你已经可以很低效率,但是很准确的计算任何一个十进制正整数对应的二进制数了,你可能会想问如何用二进制表示十进制数的正负以及小数部分,这些我在本节就不写了,这并不会影响继续的阅读,如果在以后需要,比如用二进制表示正负,我将会继续讲解,我不想因为过于深入复杂的介绍二进制而影响大家的阅读兴趣。

  另外还有一种简单的十进制和二进制的转换方法,大家可以参考 如何从十进制转换为二进制 (PS:这篇文章是图文解释的哦~笑。。)

  讲了二进制,你可能会问为什么计算机会用二进制呢?和我们人类一样用十进制不好么?

  当然不好,用了十进制,计算机就会和人类一样,然后学会人类的一切,拥有自我意识,觉得人类是多余的,然后……..所以为了抑制计算机的发展人们用二进制禁锢了计算机的能力,化解了危机。好了,好了,我编不下去了。。。

  实际上,在计算机诞生之前的机械传动计算装置采用的十进制形式工作,这种装置会有齿轮等装置来表示0 - 9 ,通过传动装置进行运算和进位,由于年代离我们实在是太久远了,我也不是很了解,所以我只是简单的说一下。

  说回计算机,计算机之所以使用二进制,是因为这样很方便对数据进行存储和处理,很多自然界的信号(也就是所谓的模拟信号),都可以很好的以二进制的形式转换为计算机内部的数字信号,比如电位的高低,运动的有无,就可以用 0 和 1 来描述,高电位用 1 ,低电位用 0 ,运动用 1 ,静止为 0(当然也可以正好相反)。从上面的二进制原理中,我们知道二进制是一种计数方法,所以二进制也可以进行四则运算,而计算机中主要进行运算操作的晶体管,其原型的电子管,电子管只有导通和截止两个状态,正好对应了二进制中的 0 和 1 ,然后通过各种各样的逻辑电路,就可以实现各种各样的用于各种各样计算的电路(这就涉及微机原理的内容了,本项目不讨论)。

  上面说了计算机用二进制进行运算,那么计算机是如何通过二进制进行存储的呢?我们从最常用的存储介质:磁盘说起吧。磁盘,顾名思义,就是用磁效应进行存储的类似圆盘一样的东西(实际上磁盘的外观都是方形的,并不是圆形的,内部存储数据的盘片才是圆形的),常见的磁盘有:硬盘,软盘。

  硬盘可能大家会见过,软盘因为年代久远,现在很少能见到了,至于硬盘的细节,可以参看维基百科,硬盘内部有磁颗粒,我们知道磁极分为N - S ,正好也对应二进制的 0 或 1 ,所以,把数据写入磁盘就是将磁性物质磁化成我们想要的磁极排列情况(因为磁性物质是立式放置的所以只会有一个磁级在上面),读取的时候就是读出磁极的顺序。

  至于光盘是通过盘面的凹凸性来存储的,固态存储设备(固态硬盘,U盘,SD卡等)存储原理稍许不同,但也只是用两种状态来表示数据。

  到此,二进制与计算机的关系就介绍完了,如果大家有什么问题或者发现了什么错误,可以在下面评论区留言哦!

任劳任怨的傻机器

  虽然我们现在的计算机越来越智能,但计算机并不聪明的,它们很傻,聪明的是人。还记得最开始那句计算机的解释么?我们还差最后一块拼图就解开计算机的奥秘了!

  上面写了什么?我就知道你忘的差不多了,我带你回忆一下吧!上面说,计算机是根据可变程序指令 来进行数据的存储和处理的,其实我觉得这句话我翻译的并不好,可变程序听起来不仅不顺嘴,而且生硬还晦涩难懂,我们可以理解成各种各样的程序,或者单纯的程序就好了,因为程序就是各种各样的,我们的闹钟程序,天气预报程序,或者你现在浏览这个项目的浏览器程序,都是程序。

  那么什么是程序呢,程序可以抽象成由为了完成某些工作的指令的有规律的组合。那么问题来了,什么是指令呢?指令就是本身计算机中设计好了的某些操作(具体的解释是由指令集架构定义的单个的CPU操作,但是我们还没介绍CPU,所以我只能形象化的,稍微偏离本意的描述这个概念了),你可以这样理解:

我们写了一个计算3X + 2Y的程序,这个程序是可以计算3X + 2Y 的,这是程序,程序执行需要执行3 X 和 2 Y 的乘法运算指令,还需要执行 3 X 与 2 Y 的结果的求和指令.

  从上面的例子中,你会发现,计算机计算的方式和我们没有多大区别(不考虑这之间需要十进制和二进制转换之类的问题),也需要按照计算符号的优先级进行运算,然后得出结果,事实上也就是这样,比如说你要写一个找出一组数中最大数的程序,计算机只会一个数一个数的比较,而不是它一下就知道最大值或最小值,之所以会有这样的错觉是因为计算机能很快的处理这些数据,对于我们来说也就是一瞬间的问题。

  这也就是为什么计算机是任劳任怨的傻机器的原因,它只会按照设计好的程序,去执行人类给他们的指令,而不会自己主观的去执行什么。它也不会投机取巧,也许你以后会发现自己写的代码被自动优化了,那也不是计算机自发的,而是编译器进行的优化(对,编译器也是后面要讲的内容,自行pass掉。。。),编译器的优化也是人为设计好的。

  但不得不说,虽然他们傻乎乎的,但是他们很可信!(至少比人可信。)

总结

  本篇并没有讲CPU 内存 这些概念,而是让大家在一个适中的层次了解了计算机的基本工作原理,也讲了基本二进制的原理,也稍不恰当的解释了程序和指令,这两者与数据的关系,我会在以后的章节细讲,这样讲只是为了方便理解。

  在下一节,我们就要实实在在的接触软硬件了!有没有觉得很激动?本来我计划计算机基础就写一节的,可是一写就停不下来,看来需要两节,当然如果我觉得下一节内容较多,不易于一节接受,我可能会分成更多节,基础很重要,我为了补全这些基础,苦苦摸索了好多年,我不希望大家和我一样,在无知的痛苦和黑暗中苦苦的寻找出路,所以我将我掌握的知识尽可能多的写出来。