前言
最近正逢招聘季节的金九银十,相信很多同学已经按耐不住跳槽的心,毕竟互联网行业有越跳越多的惯例。但是在如今越来越卷的行情下,大家可能发现单一的会使用中间件和框架的API已经越来越难找到理想的工作了。大多数公司可能都会选择通过学历,算法和实现原理来考察一个候选人的综合能力。抛开学历和算法不谈,实现原理绝对是面试中很关键的一个部分。毕竟简单的CRUD已经无法满足很多大厂对于自研的需求,这就要求候选人拥有很好的设计思想和能力。这个时候很多小伙伴发现单一的去掌握一门高级语言已经不是能够很好的满足现阶段的需求,学好计算机的基础是大多数人绕不开的一个问题了。所以接下来博主准备用半年的时间带大家复习一下包括计算机组成原理,汇编语言,操作系统,网络在内的计算机基础部分,希望大家学习完后都可以在下一个金三银四找到心仪的工作。
一、位与进制
1.1 十进制中的位
其实位的概念在大家的日常生活中随处可见,就拿我们最长使用的十进制来说,十进制中的数量由10个数字来表示,分别是:
那么第一个问题来了,如果我想要表示的数字超过9了怎么办呢?很明显发明十进制的大佬也想到了这个问题,如果当我们想要表示一个9+1的数字的时候,可以通过两个数字的组合拼成一个全新的数字:
如果再加一呢?很简单,我们只需要将个位上的0变为1即可:
沿着这个思路继续下去,当19+1的时候会发生什么呢?很简单,只需要将左面的数字加1再将右面的数字变为0。
根据上面的现象我们需要引出今天的第一个概念:位
(1) 什么是位?
数学中的位是指当数字放在不同的位上面其表达的含义并不相同。我们可以通过上述的规律发现,每一个数字所在的位置都可以通过规律计算出来,比如在十进制中,我们可以将每一位简单的概括为:
那么对应的比如520这个数字的含义就是:
那么十进制中的位理解起来就很简单了,从又到左分别是10的n-1次方,一个数字的值就是将这些位相加得到的结果。那么当大家理解了什么叫做位之后,我们接下来要理解的概念就是什么是进制?
(1) 什么是进制?
在理解进制之前,我们首先要明白一个概念:
我们日常生活中看到的0到9这些数字的本质其实就是一种符号,比如数字5我们也可以用汉字五来表示,当然罗马数字Ⅴ也是可以的。所谓的十进制其实就是提供了十个数学符号用以计数。那么以此类推,如果只提供了两种符号来表示数字的方式就叫做二进制,和人类不同,计算机无法直接通过十进制的方式来处理数据,其主要原因是由于计算机硬件想要产生十种不同的信号的成本远大于只产生高低电平两种信号的成本。人类为了适应计算机的这种特性而决定使用0和1两种数学符号来适配高低电平两种模式,这也是为什么计算机会使用二进制记录数据的原因之一,那么说来说去到底什么是进制呢?我们首先来看下某百科的解释:
通俗的来讲就是进制的存在就是防止我们无限制的去发明符号来表示数字,不难想象如果没有进制的存在,我们想要表达100这个概念可能就需要100个字符才能完成,以此类推,如果是1亿呢?那么当我们懂了进制和位的基础概念后,我们要做的就是学会如何快速在各种进制之间转换。
二、 进制转换
2.1 非十进制数转换十进制数
这个时候我们首先要看下十进制数的真实值是如何产生的:
比如简单的520,其真实值的构成就是:
5100 + 210 + 00
那么一次类推,如果我想要计算一个二进制数的真实值也可以沿用一个类似的表:
比如1011这个数的十进制值就是:
12的三次方 + 02的二次方+12的一次方+12的零次方=
18 + 04 + 12 + 1*1 = 11
让我们来用程序员计算器验证下:
是不是按照这个学会了位的思想后来做转换就很简单!
2.2 十进制转其他进制
那么同理,当我们知道位的概念后,就可以通过十进制反推其他进制,比如十进制的11转换二进制的运算步骤就只需要不停的除以2即可:
11 /2 = 5 余数 1
5 /2 = 2余数 1
2/ 2 = 1 余数 0
因此11的十进制转换为2进制即为1011,这么说可能不好理解,这里贡献我的手绘图一张: