BIN指令这个看手册是十进制转二进制怎么理解感觉看不懂,操作时发现前面是十进制,后面是十六进制,这怎么理解

前端开发人员中有相当大比例嘚同学不是科班出来的,所以对于基本的科班必修课例如:计算机组成原理操作系统计算机网络数据结构和算法等知识接触不多。

当你越深入学习越会发现这些知识的重要性。

比如大家都知道js里面0.1 + 0.2不等于0.3的为什么呢?这就牵扯到计算机组成原理中浮点数的表礻方法以及浮点数的加减运算(正文会有白话版解答)。

又例如从键盘输入a+b这个指令如何通过cpu的调度输出到屏幕上呢?这就涉及到冯諾依曼体系如果你是编程人员,都不清楚数据从键盘到屏幕的基本流向那是时候看看这篇'十全大补文'了

本文是一篇计算机组成原理最基本的入门文章,我觉得前端没有必要那么深入这个专题掌握基本的计算机组成原理的常识即可。

首先计算机最基本的5大组成部分如丅图,分别为:输入设备(比如键盘), 存储器(比如内存), 运算器(cpu), 控制器(cpu), 输出设备(显示器)

当我们输入数据的时候,cpu里的控制器会让输入设备把这些指令存储到存储器(内存)上

控制器分析指令之后, 此时让存储器把数据发送到运算器里(控制器运算器都在cpu里面)

这里需要注意存储器既能存储数据,还能存储指令

1.3 控制器控制运算器做数据的运算 并且将运算结果返回存储器

1.4 控制器控制存储器将结果返回给输出设备

从接下來我们更近一步,看看计算机内部CPU是怎么跟存储器交互的。

2、CPU及其工作过程

CPU中比较重要的两个部件是运算器控制器我们先来看看運算器的主要作用

2.1 运算器主要部件

如上图,运算器里最重要的部件是ALU中文叫算术逻辑单元,用来进行算术逻辑运算的其它的MQ,ACC这些我們不用管了,是一些寄存器

2.2 控制器主要部件

控制器中最重要的部件是CU(控制单元),只要是分析指令给出控制信号

IR(指令寄存器)存放当前需要执行的指令

PC存放的指令的地址。

2.3 举例 - 取数指令执行过程

首先是取指令的过程如下

  • 第一步,PC也就是存放指令地址的地方,我们要知道下一条指令是什么就必须去存储器拿,CPU才知道接下来做什么PC去了存储器的MAR拿要执行的指令地址,MAR(存储器里专门存指令哋址的地方)
  • 第二步和第三步MAR去存储体内拿到指令之后,将指令地址放入MDR(存储器里专门存数据的地方)
  • 第四步MDR里的数据返回到IR里面IR是存放指令的地方,我们把刚才从存储体里拿的指令放在这里

然后分析指令,执行指令的过程如下

  • 第五步 IR将指令放入CU中,来分析指令比洳说分析出是一个取数指令,接着就要执行指令了(这里取数指令其实就是一个地址码,按着这个地址去存储体取数据)
  • 第六步第七步 IR就会接着去找存储体里的MAR(存储地址的地方),MAR就根据取数指令里的地址吗去存储体里去数据
  • 第八步取出的数据返回给MDR(存放数据的哋方)
  • 第九步,MDR里的数据放到运算器的寄存器里这里的取指令的过程结束了。

来个插曲我们知道数据在内存里是二进制怎么理解存着,也就是0和1, 0和1怎么用表示呢
我们拿其中一种存储0和1的方式来说明

  • 电容是否有电荷,有电荷代表1无电荷代表0

我们看看机器语言,怎么表礻存放一个数的指令例如下图

我们来看二进制怎么理解代码 0000,0000

  • 其中第一个0000,表示的是汇编语言里的LOAD也就是加载,加载什么呢
  • 加载地址上的数据到第二个0000(寄存器的位置)

接下来,我们看看如果是汇编语言怎么表示

LOAD A, 16意思是将存储体内的16号单元数据放到寄存器地址A中 ADD C, A, B意思是将寄存器里的A,B数据相加,得到C STORE C, 17意思是将寄存器里的数据存到存储体17号单元内

最后我们看看怎么用高级语言表示

高级语言是不是很簡单,就一个a+b你都不用去考虑寄存器存储体这些事

这部分的总结 高级语言一般有两种方式转换为机器语言


  • 一种是直接借助编译器,將高级语言转换为二进制怎么理解代码比如c,这样c运行起来就特别快因为编译后是机器语言,直接就能在系统上跑但问题是,编译嘚速度可能会比较慢
  • 一种是解释性的,比如 js是将代码翻译一行成机器语言(中间可能会先翻译为汇编代码或者字节码),解释一行執行一行

需要注意的是,按照第一种将大量的高级代码翻译为机器语言这其中就有很大的空间给编译器做代码优化,解释性语言就很难莋这种优化但是在v8引擎中,js还是要被优化的在编译阶段(代码分编译执行两个阶段)会对代码做一些优化,编译后立即执行的方式通常被称为

4.1 二进制怎么理解如何转化为十进制

例如2进制101.1如何转化为10进制(有些同学觉得可以用parseInt('101.1', 2),这个是不行的因为parseInt返回整数)

二进制怎么理解的每个数去乘以2的相应次方,注意小数点后是乘以它的负相应次方。 再举一个例子你就明白了

二进制怎么理解1101转为十进制

4.2 十进制整数转为二进制怎么理解

JS里面可以用toString(2)这个方法来转换。如果要用通用的方法例如:将十进制数(29)转换成二进制怎么理解数, 算法如下:

  • 把给定的十进制数29除以2商为14,所得的余数1是二进制怎么理解数的最低位的数码
  • 再将14除以2商为7,余数为0
  • 再将7除以2商为3,余数为1再將3除以2,商为1余数为1
  • 再将1除以2,商为0余数为1是二进制怎么理解数的最高位的数码


4.3 十进制小数转为二进制怎么理解

方式是采用“乘2取整,顺序排列”法具体做法是:

  • 用2乘十进制小数,可以得到积将积的整数部分取出-
  • 再用2乘余下的小数部分,又得到一个积再将积的整數部分取出-
  • 如此进行,直到积中的小数部分为零或者达到所要求的精度为止

如: 十进制 0.25 转为二进制怎么理解

即十进制0.25的二进制怎么理解为 0.01 ( 苐一次所得到为最高位,最后一次得到为最低位)
此时我们可以试试十进制0.1和0.2如何转为二进制怎么理解

十进制数0.1转二进制怎么理解计算过程: 0.1*2=0.2……0——整数部分为“0”。整数部分“0”清零后为“0”用“0.2”接着计算。 0.2*2=0.4……0——整数部分为“0”整数部分“0”清零后为“0”,鼡“0.4”接着计算 0.4*2=0.8……0——整数部分为“0”。整数部分“0”清零后为“0”用“0.8”接着计算。 0.8*2=1.6……1——整数部分为“1”整数部分“1”清零后为“0”,用“0.6”接着计算 0.6*2=1.2……1——整数部分为“1”。整数部分“1”清零后为“0”用“0.2”接着计算。 0.2*2=0.4……0——整数部分为“0”整数部分“0”清零后为“0”,用“0.4”接着计算 0.4*2=0.8……0——整数部分为“0”。整数部分“0”清零后为“0”用“0.8”接着计算。 0.8*2=1.6……1——整数部分为“1”整数部分“1”清零后为“0”,用“0.6”接着计算 0.6*2=1.2……1——整数部分为“1”。整数部分“1”清零后为“0”用“0.2”接着计算。 0.2*2=0.4……0——整数部分为“0”整数部分“0”清零后为“0”,用“0.4”接着计算 0.4*2=0.8……0——整数部分为“0”。整数部分“0”清零后为“0”用“0.2”接着计算。 0.8*2=1.6……1——整数部分为“1”整数部分“1”清零后为“0”,用“0.2”接着计算 所以,得到的整数依次是:“0”“0”,“0”“1”,“1”“0”,“0”“1”,“1”“0”,“0”“1”……。 由此大家肯定能看出来,整数部分出现了无限循環
就这样推下去!小数*2整,一直下去就行

所以0.10.2都无法完美转化为二进制怎么理解,所以它们相加当然不是0.3

首先什么是定点数呢?

如仩图举例纯整数的二进制怎么理解1011-1011,如果是整数符号位用0表示,如果是负数符号为用1表示

同理纯小数表示举例如下:

那如果不是純小数或者纯整数,该怎么表示呢

定点数很简单,接下来我们介绍浮点数再JS里面,数字都是用双精度的浮点数所以学习浮点数对我們理解JS的数字有帮助。

上面是十进制的科学计数法从中我们需要了解几个概念,一个是尾数基数阶码

  • 尾数必须是纯小数,所以上图Φ1.2345不满足尾数的格式需要改成0.12345
  • 基数,在二进制怎么理解里面是2

所以浮点数通用表示格式如下:

这里需要注意的是浮点数的加减运算,并不是像我们上面介绍的那样简单会经过以下几个步骤完成

这些名词大家感兴趣的话,可以去网上查询我们只要了解到浮点数加减運算很麻烦就行了,但如果你要做一个浮点数运算的库你肯定是要完全掌握的。

(说明一下MDRMAR虽然逻辑上属于主存,但是在电路实现嘚时候MDRMARCPU比较近)

上图是在执行一串代码,可以理解为js的for循环

  • 数组的数据有时候在内存是连续存储的
  • 如果我们cpu发现这是取数组数据,那麼我就把就近的数据块a[0]到a[7]全部存到缓存上多好这样只需要取一次数据,消耗1000ns

cahce就是局部性原理的一个应用

  • 空间局部性:在最近的未来要用箌的信息(指令数据)很可能与现在正在使用的信息在存储空间上是邻近的
  • 时间局部性:在最近的未来要用到的信息,很可能是现在囸在使用的信息

可以看到cache一次性取了a[0]a[9]存储体上的数据只需要1000ns,因为Cache高速存储器cpu交互速度就比cpu主存交互速度快很多。

接下里進入最后一节(略过对总线知识的学习),I/O设备的演变

输入/输出(Input /Output ,简称I/O)指的是一切操作、程序或设备与计算机之间发生的数据传输过程。(注:i/o设备就是输入输出设备比如硬盘,硬盘既可以往里面存数据同时也可以从硬盘读数据,在计算机发展的初期cpu如何知道硬盘已經读取完数据好让cpu去取数据呢?cpu会采取类似setTimeout(()=>{ 检查硬盘是否读区完数据的函数调用},2000)去检查是否硬盘是否准备好数据这样效率就佷低,硬盘读文件比较慢cpu啥事都不能干,就干等)

比如文件读写操作就是典型的I/O操作。接下来我们看一下I/O设备的演进过程

在早期的计算机里cpu如何知道I/O设备已经完成任务呢?比如说怎么知道I/O设备已经读取完一个文件的数据呢?CPU会不断查询I/O设备是否已经准备好。这时cpu就处于等待状态。也就是cpu工作的时候I/O系统是不工作的,I/O系统工作cpu是不工作

  • 为了解决第一阶段CPU要等待I/O设备串行的工作方式所有I/O设备通过I/O总線来跟CPU打交道,一旦某个I/O设备完成任务就会以中断请求的方式,通过I/O总线告诉CPU,我已经准备好了
  • 但是对于高速外设,它们完成任务嘚速度很快所以会频繁中断CPU, 为了解决这个问题,高速外设跟主存之间用一条直接数据通路DMA总线连接,CPU只需要安排开始高速外设做什么剩下的就不用管了,这样就可以防止频繁中断CPU

第三阶段,CPU通过通道控制部件来管理I/O设备CPU不需要帮它安排任务,只需要简单的发出启動和停止类似的命令通道部件就会自动的安排相应的I/O设备工作

本文完结,希望大家点个赞比心 。

  为了帮助各位考生提高自己嘚水平下面百分网小编特地为大家整理了以下的练习供大家学习,希望对大家有所帮助!

  1) .在计算机中采用二进制怎么理解是因为

  A)可降低硬件成本

  B)两个状态的系统具有稳定性

  C)二进制怎么理解的运算法则简单

  2) .下列叙述中,正确的一条是

  A)存储在任何存儲器中的信息断电后都不会丢失

  B)是只对硬盘进行管理的程序

  C) 硬盘装在主机箱内,因此硬盘属于主存

  D)磁盘驱动器属于外部设備

  3) .将高级语言编写的程序翻译成机器语言程序采用的两种翻译方式是

  4) .近年来计算机界常提到的"2000年问题"指的是

  A)计算机将在2000年夶发展问题

  B)计算机病毒将在2000年大泛滥问题

  C)NC和PC将在2000年平起平坐的问题

  D)有关计算机处理日期问题

  5). 为了避免混淆,十六进制数茬书写时常在后面加字母

  6). 冯?诺依曼(Von Neumann)在总结ENIAC的研制过程和制订EDVAC计算机方案时提出两点改进意见,它们是

  A) 采用ASCII编码集和指令系统

  B) 引入CPU和内存储器的概念

  C) 机器语言和十六进制

  D) 采用二进制怎么理解和存储程序控制的概念

  7). 下面关于随机存取存储器(RAM)的叙述Φ正确的是

  A) 静态RAM(SRAM)集成度低,但存取速度快且无须“刷新”

  B) DRAM的集成度高且成本高常做Cache用

  D) DRAM中存储的数据断电后不会丢失

  9). CPU嘚指令系统又称为

  C) 程序设计语言

  A) 批处理操作系统

  B) 单用户单任务操作系统

  C) 单用户多任务操作系统

  D) 分时操作系统

  11). 十進制数39转换成无符号二进制怎么理解整数是

  12). 计算机内部采用的数制是

  13). 鼠标器是当前计算机中常用的

  14). 组成CPU的主要部件是

  A) 运算器和控制器

  B) 运算器和存储器

  C) 控制器和存储器

  D) 运算器和寄存器

  15). 下面关于USB的叙述中,错误的是

  A) USB的中文名为“通用串行總线”

  C) USB具有热插拨或即插即用的功能

  D) USB接口连接的外部设备(如移动硬盘、U盘等)必须另外供应电源

  参考答案:1-15 D、D、A、D、A、D、A、D、B、C、C、B、B、A、D

我要回帖

更多关于 二进制怎么理解 的文章

 

随机推荐