文档章节

为什么计算机能读懂 1 和 0 ?

TTLeo
 TTLeo
发布于 2014/11/05 21:40
字数 1720
阅读 70
收藏 2

在此输入代码

既然是问最最原始的那个工作原理……

从小到大,我们被告知的都是,计算机只能读懂 1 和 0,但我好奇的是为什么计算机它就能够读懂 1 和 0 呢,它是怎么读懂的?读懂后,又是怎样进行工作的呢?嗯...我想问的就是,最最基本原始的那个工作原理

+++ 理论的分割线 +++

最最基本原始的那个工作原理甚至都和电无关,是数学原理,布尔代数(搜索),任何可以改变状态传递信息的技术都可以拿来实现布尔逻辑,而实现了布尔逻辑,就离计算机不远了。

像是《三体》里面的人列计算机,就是用三体人实现计算机,这一段我直接跳了,没什么可看的,因为我懂嘛……

我还设想过水流 + 开关实现逻辑门,是可行的。

「现在可以公开的情报」

  1. 计算机的理论基础是布尔代数

  2. 计算机的实现基础可以是任何拥有『改变状态』和『传递信息』的技术

+++ 基础实现的分割线 +++

继续正题……

起初, 科学家创造计算机,科学家说,要先有逻辑门,然后就用真空二极管实现了逻辑门。

真空管的原理去搜吧

电子计算机的原理就是利用通电、断电(或曰高电平低电平)这两个状态来表示布尔代数中的逻辑真和逻辑假从而实现布尔运算,由于这个原因,设逻辑真为 1 和逻辑假为 0,这样就可以用计算机表示二进制的数字了。

现在的计算机用的是晶体二极管,虽然底层原理不同,但是性质是一样的,这就是编程中常说的封装和抽象的好处,你不需要关心它的原理,用它实现你的功能就行了。

所以说起来,现代电子计算机的实现,是物理原理,计算理论,是数学原理。

二极管的性质是这样的,只有一个方向可以通电,反向不通电。

「想知道具体原理的可以搜索 PN 结」

还有三极管(还有一种性质相似的场效应管 FET),性质是这样的,b 通电 ec 通,b 断电 ec 断

「具体原理搜索 NPN 结」

【【【【配图】】】】

二极管和三极管

然后可以组成逻辑电路,下面分别是与或非(AND、OR、NOT)三种逻辑门的电路实现

【【【【配图】】】】

从左到右分别是与或非三种门,x j 表示输入,m 表示输出

有了这三种逻辑门电路,你就可以实现任意逻辑门了,比如与非门、或非门、异或门、同或门(异或非门)。(搜索逻辑门)

(实际应用中,是以与非门(NAND(Not AND) gate)为基础原件来构建电路,因为其他所有门电路都可以用与非门构建,关于这一点,你可以思考一下

「现在可以公开的情报」

  1. 地球当代的计算机的实现基础是电子技术

  2. 二极管和 FET 的技术原理是 PN 结和 NPN 结,是原子、电子层面的原理(很底层吧……)

  3. 用二极管和 FET 可以实现布尔代数中的逻辑操作,称为『逻辑门』

+++ 逻辑的分割线 +++

二进制数字的加法如下:

1+1=10

1+0=1

0+0=0

0+1=1

用上文中的逻辑门就可以实现这个加法。

不考虑进位的情况下(术语叫半加器),用一个异或门就可以实现两个数字相加,很简单,就不画图示意了,自行思考吧。。。

考虑进位的情况下(术语叫全加器),稍微有点复杂,输入通过 XOR(异或门)得到结果,同时过一个电路得到进位结果

进位规则如下:

1+1 进位 1

1+0 进位 0

0+0 进位 0

0+1 进位 0

可见进位规则可以用 AND(与门)得到结果,所以电路图如下:

【【【【配图】】】】

把这样的电路串起来,就可以实现多位加法,自己想想看吧。

不过这里有一个问题,要连多个例图中的加法器,需要给电路添加一个输入口 m,它是上一位的进位,有兴趣可以思考一二。

实际应用中,电路并不是凭空想的,是通过布尔逻辑运算得到一个最简逻辑表达式,然后按照这个表达式来组装电路,『请搜索数字电路』。

淘宝可以买到 LED 灯、二极管和三极管,虽然现在涨价了,但价格依旧感人,不到顺丰快递费就可以买一大把,有兴趣的同学可以自行购买这些元器件组装电路来玩玩。

输出端接上 led 灯,就可以观察到电路运行结果。

额外的,如果你把几个灯泡并联并且弄成一条线段的样子当做一个整体灯管,然后通过输入来点亮相应灯泡,就可以用来显示数字了。。

像下面这种,一共 7 个灯管

1 点亮右边两根、2 点亮相应的,以此类推

这样可以用布尔代数做出来 5 个输入 7 个输出相对应的逻辑,然后用上文的逻辑门组成电路图实现

(为啥输入是 5 个?)

「现在可以公开的情报」

  1. 可以用逻辑门实现加法,也可以实现减法

  2. 实现加法的原理在于通过输入进行逻辑运算得到输出,这一学科可以通过搜索『数字电子技术』获得详情

  3. 通过灯泡等设备,可以实现电路的输出

  4. 计算机的本质原理就是接受『输入』,通过『计算』,得到『输出』

  5. 通过上文所有文字,已经部分解决了楼主计算机为什么能读懂 1 和 0 以及内部工作原理的问题,虽然还剩下时序逻辑,不过这已经够了。楼主赶紧点赞吧

+++ 分割线 +++

太长了……

后续还有反馈电路、触发器、时序逻辑存储器等等等等,最终目标是弄出一个 CPU 来(如果我有时间的话)可以写一个模拟器让感兴趣的同学用逻辑门拼凑 CPU(如果我还有时间的话)

「待续(应该大概真的会续)」

** 不过最后还是想提醒还在学校的 cs 同学们,这些知识对找工作毫无帮助,请不要在此屠龙之技上浪费时间。

--------------


本文转载自:http://www.zhihu.com/question/20112194

TTLeo
粉丝 0
博文 15
码字总数 5650
作品 0
太原
私信 提问
程序员编程语录

程序员编程语录 Linux下C/C++、ACE、Boost、高性能服务器端应用 开发技术 1. 一个好的程序员是那种过单行线马路都要往两边看的人。(Doug Linder) 2. 程序有问题时不要担心。如果所有东西都没...

manm
2014/01/02
949
1
为什么计算机最小的存储单位是字节?而最小到的传输单位是bit?

数据存储是以“字节”(Byte)为单位,数据传输是以大多是以“位”(bit,又名“比特”)为单位,一个位就代表一个0或1(即二进制),每8个位(bit,简写为b)组成一个字节(Byte,简写为B)...

吴伟祥
2018/10/10
75
0
教育:构造主义和机能主义

“CPU如何工作?”   (这个问题由随笔《一种很简单的编程语言》引发)(该文写了一部分,还未发表)   我看过《编码:隐匿在计算机软硬件背后的语言》,但是今天回想这个问题,还是觉得...

琉年
2018/01/06
0
0
python学习:循环

循环:为了让计算机能计算成千上万次的重复运算,我们就需要循环语句。python的循环有两种,一种是for...in循环,依次把list或tuple中的每个元素迭代出来,ex: python提供一个range()函数...

yyferocious
2016/08/18
8
0
Java GBK中文乱码问题分析

在io相关的操作中经常会出现乱码问题 比如在一个txt文件中按GBK编码保存内容"淘!我喜欢!" 然后用RandomAccessFile类读取并打印一行。 打印结果显示乱码: 在网上查询到加入相关编码解码操作...

skyshitt
2016/02/11
3.9K
14

没有更多内容

加载失败,请刷新页面

加载更多

nginx学习笔记

中间件位于客户机/ 服务器的操作系统之上,管理计算机资源和网络通讯。 是连接两个独立应用程序或独立系统的软件。 web请求通过中间件可以直接调用操作系统,也可以经过中间件把请求分发到多...

码农实战
今天
5
0
Spring Security 实战干货:玩转自定义登录

1. 前言 前面的关于 Spring Security 相关的文章只是一个预热。为了接下来更好的实战,如果你错过了请从 Spring Security 实战系列 开始。安全访问的第一步就是认证(Authentication),认证...

码农小胖哥
今天
9
0
JAVA 实现雪花算法生成唯一订单号工具类

import lombok.SneakyThrows;import lombok.extern.slf4j.Slf4j;import java.util.Calendar;/** * Default distributed primary key generator. * * <p> * Use snowflake......

huangkejie
昨天
12
0
PhotoShop 色调:RGB/CMYK 颜色模式

一·、 RGB : 三原色:红绿蓝 1.通道:通道中的红绿蓝通道分别对应的是红绿蓝三种原色(RGB)的显示范围 1.差值模式能模拟三种原色叠加之后的效果 2.添加-颜色曲线:调整图像RGB颜色----R色增强...

东方墨天
昨天
11
1
将博客搬至CSDN

将博客搬至CSDN

算法与编程之美
昨天
13
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部