计算机是怎么通过二进制原理来工作的?

从来都听说计算机最基本的原理是根据二进制来设定的,最基本的但是是0和1
计算机里任何信息都可以转换成0和1的形式,但是我就是不明白是怎么转换的。。。
大神们能不能简单的说说原理

最好再举两个例子
1,怎么用二进制表示5+3=8
2,怎么用二进制表示hello

推荐  (0) | 43人关注关注
26个答案
93 10

先贴一个计算机基本结构图。目前绝大部分的计算机(不仅仅PC)都是基于这个结构的。

可以看到,在计算机内不同的功能模块之间,有两种数据流动,一种是数据流,一种是控制流(没错,控制指令也是数据的一种)。这两种数据,都是通过二进制来表示的。

对于数据流来说,就是将数据通过特定的编码方案,转换为二进制进行存储和传输。常用的编码方案比如ASCII,UTF-8, UTF-16等等。

对于控制流,则不同的运算芯片有不同的诠释。举例子,下表是从Intel的指令集手册中摘录的add指令的解释表格:

最左一列就是二进制的表示方法(通常为了方便,写成16进制),第二列是表示写成汇编代码的样子。
比如CPU从指令寄存器拿到一条指令地址,并且读出来数值是0403(二进制就是0000010000000011),就会解释为上表中的第一条,将3加到AL寄存器中。可以看到,这个例子指令实际上既包含了控制,又包含了数据。

所以计算机在计算3+8的时候,就是一个类似的过程。根据计算机架构的不同,可能将计算放置到寄存器中计算,或者将计算放置到内存中计算,或者在某特定的计算单元中计算。

每个运算单元都有自己特有的指令集,以便对输入的数据进行加工,产生输出。比如CPU,GPU,以及各种可编程接口芯片。 同一个二进制片段数据,在不同的模块或者运算单元中,都会有不同的解释。可能解释为数据,也可能解释为控制指令。

30 11

学完《微机原理与汇编》这门课程你所踢得问题才可能有一个系统的回答。。。
我是信息工程专业的,想当年大二的时候学这玩意真叫做是一个灾难。。。

27 10

集成电路中的运算放大器可以实现加减乘除积分微分等各种运算

23 8

首先得承认通过与或非可以解决任何的逻辑问题和计算问题。而与或非可以用二进制来表示。而对于硬件他可以通过通断来表示0和1。假如有一种理论:可以用3种状态或者四种状态可以完整的表述世界,同时硬件上出现3态或者4态的东西(例如DNA)那么计算会更加的快速和方便。

23 10

看你这个程度想要讲清楚比较困难啊,那就回答一下那两个问题吧。
1,怎么用二进制表示5+3=8
回想一下小学怎么学加法吧,
一个盘子有5个苹果,一个盘子有3个苹果,把一个盘子里的苹果都拿出来放进另一个盘子里,得到了8个苹果。
这就完成了一次加法运算,存储介质是盘子里的苹果,运算规则是“把一个盘子里的苹果都拿出来放进另一个盘子里”。
再说你是怎么口算5+3=8的呢?
把5和3记在脑子里,然后回忆起加法口诀得到了8。存储就不提了,运算规则其实是加法口诀表。
换成电脑的话,存储介质是内存里电位的高低(或者是寄存器里),运算规则是完成二进制加法的电路,没错是电路,有兴趣的话可以用元器件电烙铁焊一个出来的,只不过在CPU里这个电路很小就是了。
看到共同点了吗?

2,怎么用二进制表示hello
这个就更简单了,对电脑来说不过是
01101000 01100101 01101100 01101111
这样的一组电信号而已,这一组电信号根据操作者的要求以如下规则来解释:找到一个同样编号的图像(就是对应字母的图像)显示出来,再下一个编号的图像,显示在前一个图像的后面。

“计算机里任何信息都可以转换成0和1的形式”?
这句话应该算是说反了
电脑总是按照预先定好的规则工作的,人规定信息转换成01形式的规则,人用电路实现这种规则,这和用汉字(图像)记录说话的内容(声音)没什么本质区别,表现形式的转换而已。

18 8

这个嘛,首先要理解的是所谓计算,实际上是把一个数变为另一个数的过程,而不是我们人脑的计算。比如3+3 = 6,用二进制表示(8位,也就是计算机最基本的存储单位一个字节)就是 00000011 +00000011 = 00000110。所以对于3+3=6这个问题,在计算机当中实际上是如何把两个输入数据00000011 和 00000011变为正确的输出 00000110的问题。

要解决这个问题,就要知道与、或、非门电路。计算机中一半1用高电平表示,0用低电平表示。与电路就是两输入都为高电平时输出高电平,其余低电平;或电路是两输入不都为低电平时输出高电平,而非电路则是对输入电平取反。更高级的就有多输入的与或非电路,或者把两个电路结合形成与非门、或非门之类的东西。但是最基本的就是与或非三种电路。它们可以用简单的器件来实现,可以做的极其微小大量地集成到一块芯片当中。根据逻辑运算的规则,一切计算都可以规约到门电路当中去。其实我们现在的软件,如果给以足够的空间和时间的话,可以完全用门电路的形式来实现,这就是所谓软件和硬件具有逻辑上的等价性。

回到第一段的问题。要让两个信号输入信号相加得到另一个信号,就需要运用这些门电路。以特定方式连接门电路就可以做成4位加法器、八位加法器等等各种集成电路。如果在电路中再加一个控制信号,来调控电路的通断,那么就可以让一个芯片实现各种各样的运算。比如最简单的刚才介绍过的加法,以及减法(实际上是对减数做一个处理让它变成我们认为的负数,然后两数相加),乘法(连加,用计数器控制加的次数),除法(连减)。所以实际上cpu的运算部件只是加法器而已。

这样,我们就从硬件上实现了各种各样的运算。然后要考虑的问题就是如何把实际的问题转换成能够计算的问题了。然后基于这些我们就有了现在所用的计算机。

如果想深究的话,楼主可以看看离散数学的逻辑运算部分,还有数字电路基础这两本数,看完你就明白了。

15 8
#include<iostream>
#include<stdio.h>
using namespace std;
int main(){
    int a,b;
    scanf("%d%d",&a,&b);
    int c;
    c=a^b;int d;int e;
    d=a&b;#define Plus1 \
    d=d<<1;\
    e=c^d;\
    d=c&d;\
    c=e;
Plus1;Plus1;Plus1;Plus1;
Plus1;Plus1;Plus1;Plus1;
Plus1;Plus1;Plus1;Plus1;
Plus1;Plus1;Plus1;Plus1;
Plus1;Plus1;Plus1;Plus1;
Plus1;Plus1;Plus1;Plus1;
Plus1;Plus1;Plus1;Plus1;
Plus1;Plus1;Plus1;Plus1;printf("%d",c);}
可以感受一下。​
10 3

程式化小文艺爱好者

2013-12-19 16:04

《深入理解计算机系统》可能对于小白来说太难了,这本读起来会容易点:计算机系统槪论 / (美) Yale N. Patt, Sanjay J. Patel著; 梁阿磊, 蒋兴昌, 林凌译 -

14 8

要知道计算机为什么用1/0表示信息,先得理解什么是memory, memory由CMOS三极管构成,CMOS三极管可以构成反相器,反相器简单来说就是输入高电压输出低电压,反之可推。Memory通过多个反相器来存储信息,高低两个电压就表示了1/0.
这是底层的原理,在往上层,ASCII 码可以表示不同的字符, 至于二进制相加,这个和十进制是一样的,只是base变成了2.

15 9

首先明白现在计算机就是有限图灵机,从图灵机模型演变过来的。

关于图灵机,参考:
http://baike.baidu.com/link?url=GzUjQJQ7DIhR3XYfukJNcOkpL04Rc970V-fV8GkbrLWslA9PM0wZosd6H6x_1W0l

有限图灵机的意思就是纸带长度有限,即我们说的内存大小是有限。

现代计算机核心无外乎存储,控制,计算,输入,输出。你想知道的二进制和如今计算机的关系,我们先撇开输入,输出不谈。二进制核心就是1,0两个数字,对应电路中通,断电流。我们只要事先约定好同电流为1,断开电流为0,那么我们就可以表示一个二进制的数字。假设我们横排着四盏灯,分别为A,B,C,D。那么0则可以表示为四盏灯全灭,即A=0,B=0,C=0,D=0(0表示灯处于灭着的状态)。那么数字1则是ABC三盏灯全灭,D亮着,则A=B=C=0,D=1。依次类推,我们可以知道A=1,B=1,C=1,D=1则代表了15。如果灯越多,我们可以表示的数字越多,比如现在所谓64位操作系统,就相当于有64盏灯。这样我们实现数字的存储。这很关键!

既然我们能存储数字了,那么计算就好办了。参考前文所说的图灵机模型,图灵几十年前就给出了如何在一个纸带上实现四则运算的过程。当然这个方法很繁琐,后来人用逻辑电路实现了计算。再从电路角度考虑,1表示同电流,0表示断开电流。那么如果两个电路并联,输入0和1,则另一端依旧有电流。即为1,代表了0+1=1。同样,如果两个电路串联,则是0+1=0,这似乎不符合加法但改成0*1=0是不是就正常了呢?最简单的逻辑电路有与门,或门,非门,这三个构成了计算机计算的基础。再复杂的计算都是由这三个门构成的。

至于Hello,其实计算机根本不识别字母,对计算机来说永远只有0,1.于是人们规定了一些特定数字代表相对应的字母。这些字母和数字的对应有一张表。比如早期的ASCII码,现在常见的Unicode等等。前段时间跟一个google工程师聊天,提到谷歌最近也在重制字符编码,估计过段时间新的编码方式也会出现。

关于Asccii码,可以自己看:

http://baike.baidu.com/view/15482.htm

9 3

简单点说,就是所有逻辑运算都能用电路解决。0/1本质就是高电平低电平。

11 6

首先,计算机内部是使用直流电。
其次,元器件组的信息交换方式只有电流的通和断,有人说为什么不用正负零表示,二极管三极管不跟你玩这套。
那么,元器件组之间的信息表示方式可以用1和0来代替。
一组元器件不够用两组来表示,信息传递的量不是2+2的方式,而是2的N次方来表示。
那么当用到4组元器件的时候4004 CPU就出现了,我们像红白机上那么多经典游戏都是4位机的CPU,然后然后一直到现在64位运算出现。
其实,计算机内部为了偷懒效率,直接都使用二进制交换信息,最终延伸到外部和我们人交换信息,才有时候需要改变进制状态。
至于,量子有三个状态,也应该出现三进制计算机。
如果,有人非要依靠电压不同表示不同的数字在元器件组里传递信息,我还想不出怎么解说,求教达人。

14 9

泸左淬冰生医学博士,法学学士。

2013-12-20 08:33

推荐《穿越计算机迷雾》.李忠.电子工业出版社

15 11

5=101
3=11
5+3 = 101+11=1000=8


hello for ascii
01101000 01100101 01101100 01101111
然后放入硬盘或内存
读取的时候反向做一次然后显示

8 4

1.某个字母对应的二进制表达和相应的字符集有关,比如ANSI的h就是01101100(=104D),而Unicode的h就是01000100(=68D,\u0068).
2.二进制表示行为这个如果你看过汇编的话你就知道,每一个汇编指令都对应了一条机器码(与CPU等等有关,一般因机型而异),这个机器码就是正宗的数值了,而且是算出来的。这里有个网上的例子
http://www.hackbase.com/lib/2007-07-28/11231.html
这里面有比较详细的讲如何在x86的CPU下将指令转换为机器码,1L也有写。
机器码里面的B8什么的都是16进制表示的数,也就是二进制代码的不同写法了。
程序只是一种特殊的数据罢了。
@jowtte 指令集手册放成硬盘地址了。。。

11 7

看到上面各楼的回答,我估计楼主仍然无法很好理解。
我也无法很好地用文字讲清楚。
其实,国内很多相关教材都是一样,讲不清楚。
但是,好书仍然有的。
请参阅《编码:隐匿在计算机软硬件背后的语言》一书,中英文都有。
无论对于专业人员还是爱好者都是理解计算机原理的一本好书。
如果我大一的时候就看了这书,就不用受那些折磨了。

9 6

要搞清这个,先百度下与非门和累加器。你可以这么认为,各种符号均有一个二进制表达的数字对应。无论是字母还是数字,对于计算机而言都可以翻译成0或者1。首先2个问题中应该包含2个小问题,一个是计算机如何计算的,一个是如何显示的。第一个小问题baidu累加器就OK。第二个小问题涉及到很多基层的东西。比如控制每个像素的开或者关,这个概念其实就是0或者1的概念。对于计算机而言,只有对或者错,是或者不是,左或者右。没有第三种情况。把所有的问题都拆分成最基本的开或者关就OK了。不要讨论什么内存、控制、还有什么16进制转换成8进制或者2进制。对于这个问题来说都不重要,重要的是用计算机的思想去表现你所看到的东西。

12 9

因为计算机的硬件决定了他只能使用高低电平进行逻辑运算,也就是通过0,1进行运算

2 3

这个东西,不是一个回答就能解决的,如果你是学计算机的,那么老老实实看书,如果你只是兴趣,那么,只要知道硬件是通过1和0来控制电流的通和不通的。就这么简单。

5 7

1定义变量确定数据类型例如整型浮点型...
2转换成原码:bcd或者是ascall码
3将原码转换成补码进行运算(计算机只会做加法运算,用补码可以把4则运算全部转换成加法)
以上是软件部分
m/i0低点为从io口读取数据
rd接口有效,控制数据传输方向
cup接收数据
cup对总线数据采样获得数据
有了3 5 两个数据
m/i0高电位从内存读取数据
rd接口有效,控制数据传输方向
地址译码
cup接收数据
cup对总线数据采样获得数据
有了加法运算的指令
m/i0高电位写入io口
cup向地址总线发出数据
cup完成操作删除信息

应该漏了很多LZ将就着看吧,
第在这一次回答思路有点乱

3 10

我觉得问题的最关键在于“编码”,打个比方就是跟摩斯密码原理完全一样,是人对信息的表示的一种约定。
比如在摩斯密码里约定 ━ ━ ━ ━ ━(DahDahDahDahDah)(5个嗒)代表数字1 .━(DiDah)代表字母A,按照这一约定人们可以把信息(如字母数字)编成电码,也能把电码解析回来,变成人可以理解的自然语言文字。
同样,在计算机里也是一样,是按照各种各样的编码规则,对信息进行编码与解析。
打个比方,音乐文件有好多不同的格式,mp3,wav,ma4,wma等等,这些其实都是不同的编码。

所以问题的关键在于约定的规则与表示信息的形式这两个方面 ,二进制就是表现的形式,至于为什么选择用二进制呢?因为二进制只有0和1两个号,正好跟电子电路的有电压、无电压对应,或者说跟高电位、低电位对应,便于计算机处理

查看更多

添加回答

登录 后回答问题,你也可以用以下帐号直接登录

相关问答

关于我们 加入果壳 媒体报道 帮助中心 果壳活动 免责声明 联系我们 移动版 移动应用

©果壳网    京ICP证100430号    京网文[2015] 0609-239号    新出发京零字东150005号     京公网安备11010502007133号

违法和不良信息举报邮箱:jubao@guokr.com    举报电话:18612934101    网上有害信息举报专区    儿童色情信息举报专区