工作生活

计算机中的计算

2019-07-02  本文已影响0人  Ly_Never

计算机中的计算

我们都知道计算机由软件和硬件组成。而真正参与运算的核心硬件是处理器,即CPU。简单来说,CPU实际上就是一堆复杂的逻辑电路组成。那什么是逻辑,什么又是电路,什么又是逻辑电路呢?

逻辑电路

逻辑一词来自于古希腊,有一门专门研究逻辑的学科称为逻辑学。在这里,我们对逻辑可以简单理解为数学上的逻辑,即表示当一定的条件成立时,某个命题的真与假。在逻辑运算中,最基本的3种运算是与、或、非。大家在高中数学中已经学过了所谓的或且非真值表,且也就是我们所谓的与运算。

逻辑电路

那电路呢?通常电子部件组成的导电回路,称为电路。而在数字电路中,只取0和1,0代表低电平,1代表高电平。数字的1和0对应了逻辑上的真与假,因此这种电路叫做逻辑电路。

大的电路也都是由小的电路模块组成,因此在CPU中需要设计很多基础的逻辑电路,例如比较器、加法器、编码器等等

比较器

比较器的输入是A、B的两个32位的二进制数,粗箭头表示多根线,细线代表一根线,每根线的电平为高或者低,代表1或0。A和B各代表32根线,每一根线代表1位。输出则有3根线,如果A>B,则第1根线呈高电平,其余两根线呈低电平,如果A=B,则第2根线呈高电平,其余两根线呈低电平,如果A<B,则第3根线呈高电平,其余两根线呈低电平

编程中的if、else语句就会用到比较器:

比较强

加法器

加法器是数字电路中最重要的模块,它是所有运算的基础。实际上加、减、乘、除四则运算都可以使用加法器实现。在数学中,减法是加法的逆运算,除法是乘法的逆运算。例如加法是a+b,则减法可写为a+(-b),乘法是a*b,则除法为a*(1/b),另外,a*b又可解释为有b个a相加,a+a+a+...,因此仅使用一个加法器就可以构建出加、减、乘、除四种运算,而这样做可以降低CPU设计的复杂度。

编码器

当我们在键盘上敲一个键时,计算机怎么知道我们敲的是哪个键呢?

实际上是因为每个键都连到一个编码器上,假如按了数字3这个键,相应的连线变成高电平,编码器就输出这个键的编码。如果有16个按键,那么输出可以用4根线表示,按键0用0000表示,按键1用0001表示……计算机只需根据编码器输出的编码就知道了我们按的是什么键,从而进行相应的处理。

解码器

有了编码器,那自然会有解码器,不然怎么知道每个编码代表什么意思呢?解码器将每个编码解析之后输出到显示屏上面显示出来。

二进制的运算:

二进制表

加法

为了简单,现在假设我们只有一个4位的加法器,则5 + 3的运算如下

将十进制数转为二进制

将各个位上的数字相加,满二进位

加法运算’

再来算一下8 + 9的结果

做加法

可以看到,由于我们只有四位,溢出的部分将被丢弃,黄色数字被丢弃,因此使用四位加法器计算8 + 9的结果是1

减法

有了加法,还需要算减法,那我们如何才能使用加法器来计算减法呢?要解决这个问题,首先要引入补数的概念。

在日常生活中,时钟的时针转一圈为12小时,假如现在时钟的时针指示到六点,想要它指向三点,我们可以按顺时针方向将它拨九格,也可以逆时针方向转三格,结果是一致的。如果我们规定顺时针方向为正,逆时针方向为负,那么-3和9的效果是等价的,这时候就可以说-3和9是以12为模的补数。

补数的一些概念:

一个正数和一个负数互为补数时,两数的绝对值之和称为模

一个负数可用它的正补数来代替,而这个正补数可以用模加上负数本身来得到

正数的补数为其自身

我们知道4位二进制最多只能表示16个数字,这就像时钟上一圈只能表示12个小时一样,因此直观的就能感知到4位二进制中互为补数的模一定是16。

有了补数的概念,就可以将一个负数转换为它的正补数,例如要计算8 - 3可以写成8 + (-3),将-3转为它的补数13,那么最后只需要计算8 + 13的值就可以计算出8 - 3的值,如果大家不信,我们就来算一算

加法运算

将8和13的二进制相加,结果为10101,因为我们是四位处理器,结果溢出,必须丢弃最高位的数字,最终结果为0101,它的十进制结果正好是5,怎么样,神奇吗?

引入负数

补数实际上是一种处理带符号数的方法,用于变换数字的符号。这在计算机中被称为补码。我们之前算补数,需要借助模,实际上在计算机中,求补码有一套简单的办法,口诀就是取反加一

例如求13的二进制补码,那么就先将它的二进制取反,即对1101的每一位取反,我们前面说过,1表示真,0表示假,取反就是逻辑非运算,对1取反自然就变成0了,所以取反后的二进制为0010,然后对取反后的结果加上1,最终结果就是0011,它的十进制就是3,正好与13互为补数。

计算机二进制补码求法你学会了吗?

咱们之前计算的都是正数的加减运算,有同学肯定会疑问了,那如果引入负数会如何呢?

首先要明确一点,如果想表示负数,那肯定需要有一位来表示符号,因此4位二进制中,就只剩下三位有效位了,表示的正整数范围肯定会变小了。假设我们让4位二进制的最高位表示符号位,0表示正数,1表示负数,那么正数的范围只能是1~7,负数的范围是-8~-1

进位

在计算机中,负数的二进制使用它的补码表示,而补码的求法就是取反加一。例如-1的补码就是1的二进制取反加一,当有符号位时,符号位是不参与取反的,因此就是001取反加一得111

好了,学了这么多概念,赶紧来计算一下4 - 6的结果吧

加法计算
上一篇下一篇

猜你喜欢

热点阅读