前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >为什么要在计算机教材的开始部分放上“二进制”的运算?

为什么要在计算机教材的开始部分放上“二进制”的运算?

作者头像
问问计算机
发布2021-11-16 15:19:43
4470
发布2021-11-16 15:19:43
举报
文章被收录于专栏:问问计算机问问计算机

在操作系统的学习中会离不开二进制、十进制、十六进制这些内容。常常一些计算机系列教材中会把它们放在开端位置进行介绍。可是因为它没有情景,没有设定,没有基础的情况下就会感觉仅仅是数字之间的换算枯燥乏味。

但是对于很多开发者来说,工作中只是停留在对于业务功能模块的拼接上,编辑器下的代码,如何在编译器的作用下高级语言如何最终能够驱动硬件完成相应工作的过程缺乏认识。比如:

①程序与操作系统、处理器的关系;

②数据是如何表示并存储在存储器与外部设备上;

③处理器是如何访问与执行指令的,以及指令是如何访问与处理数据的;

④程序是如何访问外部设备的;等等这些问题。

所有的高级语言C、C++、Java、C#或者汇编这一类的低级语言,最后都要在编译器的翻译下,转换成二进制码。

为什么是二进制码,因为数字电路中电压的高低使用逻辑电平来表示,其中“0”代表低电平,“1”代表高电平。这里的0和1,在我们的二进制运算中也可以理解为在某一位上有值,或者没有值。因为在一串二进制数字中,某一位上如果是0,那对应位就是0,因此可以理解为有、无。用这个思路在二进制的换算中可以帮助过滤值为0的位的计算。

在不同的语言表示中,对应于不同的逻辑有各式各样的,便于人们阅读的数字表示方法,包括十进制、十六进制。

提到二进制的运算的时候,其实我们如果从十进制的角度来观察规律,去理解二进制反而更容易,如果先从二进制进入反而并不是太容易理解,因为生活中使用的多是十进制。

如下,一个十进制数:

代码语言:javascript
复制
871

=800+70+1

=8*100+7*10+7*1

=8*10^2+7*10^1+1*10^0

如果是二进制,就把上述的底数10,换成2,对应位的值从 0-9 变成 0-1,这样就能够从十进制过渡到对二进制的理解。

每一个数字在每一个位上代表的意义并不相同,这就是位的概念。

那么进位又怎么理解呢?十进制逢十进一,十六进制逢十六进一,八进制逢八进一,二进制逢二进一。这就是进位,可以回忆一下我们学算盘的时候,进位是在什么情况下在上一位加一的。

可以通过画数轴的方式换算,这种方式可以辅助理解:

代码语言:javascript
复制
82可以拆分成64+18,18可以拆分成16+2,所以82=64+16+2

在二进制的x轴上标记0和1,也就是无或者有

<------64-------32-------16------8-------4-------2--------1------------

-------1--------0---------1-------0------0-------1--------0------------

这样十进制就能很快转换成二进制 82-> 1010010

计算机通过CPU将一串二进制数字转换为高低电平,驱动计算机运行。CPU中存放了一部分指令和数据,绝大多数指令和数据都是存放在主内存中,也就是内存条中。

指令和数据在内存中是没有任何区别的,只有当读取到CPU中,CPU才会区分指令和数据。CPU要从内存条中读取指令和数据,然后还会写入放回到内存中。

在这些指令和数据的传输过程中又要用到总线,不同的总线,又有着不同的寻址能力。总线的理解之前有过介绍:如何简单理解总线,计算机中的BUS

这就是二进制比较神奇的地方,程序员们在堆业务的同时,背后会有一堆二进制码结合电路驱动电脑的各种元器件执行各种各样的动作,如果不了解这些,那操作系统、计算机原理、内存、CPU等的工作方式,都没有办法理解。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-11-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 changyandou 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档