计算机计数法

计算机和人类

阿尔法大胜柯洁后,计算机在大家眼里更厉害了,但是计算机比人类的最有优势就是,普通一个小学生,都会做12+9这个加法,但是如果你把这个东西给计算机,它是不能处理的,准确的说是它不能直接处理,要让它能处理,我们需要给它一条指令:add bx,ax,add的意思就是告诉计算机做加法,至于后面的bx、ax,我们就认为它们是两个数,不过它不是12和9,而是1100和1001,因为我们的计算机只认识二进制,无论何时,计算机CPU处理的都是二进制,那么连12和9都不认识,计算机为什么能做很多我们人不能做的事,而且我们觉得它非常厉害呢?主要是因为它的速度足够快,20以内的加法,计算出结果,我们人大概0.5秒做一个,一秒就2个,但是我们计算机的每秒能执行多少条这样的指令呢?

CPU的频率和速度关系

一般我们看电脑的参数时,一般的人可能会看CPU的型号,i5的或者i7的,因为我们大多数人都知道i7比i5要快,再深入的去看CPU的参数,会发现它有一个参数频率,表示一秒振荡多少个周期,还有一个重要的参数就是IPC(Instruction Per Clock),表示一个周期执行多少指令,所以我们要计算每秒的指令数,就需要用这两个参数相乘。计算出来的单位为MIPS(Million Instruction Per Second)每秒百万条指令。但是不同的CPU参数IPC是不一样的,所以我们不能认为一个频率越高的CPU,它的速度就越快。一般我们现在的CPU通过这两个参数计算出来的结果在亿以上,也就是一秒钟计算机可以上亿个这样的加法,而人类只能计算2个,计算机的优势就在这里。

计算机的计数法

我们已经知道,计算机里面都是处理的二进制,也就是0或者1,有一个重要的原因就是我们可以通过电平来表示这两个数,高电平认为是1,低电平认为是0。一个0或者1,称为一个比特(bit),也就是一个位,是计算机中最基本的单位。

  • 1 Byte(字节) = 8 bit (1B=8b)
  • 1 KB = 1024 Bytes
  • 1 MB = 1024 KB
  • 1 GB = 1024 MB

进位计数法

我们常用的十进制是进位计数法,二进制也是,还有一种十六进制也是进位计数法。进位计数法有一个特点,某个数和它的位置有关,例如十进制356D(D:Decimal代表十进制)可以表示为:

3 * 10^2 + 5 * 10^1 + 6 * 10^0 = 356

同样的,二进制也可以用这种方式表示,只需要将十进制的基数10改变为二进制中的基数2。例如二进制1011B(B:Binary表示二进制):

1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0 = 11

这样我们也可以把二进制转化为十进制了,因为二进制对于我们的习惯来说不太直观,所以这是我们会经常做的,那么把十进制换算成二进制也是我们经常会做的,方法就是对十进制数不断的除2取余,直到商为零。

十六进制

计算机里面用二进制是和电路有关,十进制是为了能让我更直观,那么十六进制在计算机中有什么用呢?二进制是计算机的官方语言,但是它也有缺点,就是太长了。在汇编语言中,我们习惯用十六进制表示一个数,如:

mov ax,0x3f

0x表示十六进制,也可以这样:

mov ax,63

十六进制3FH(H:Hexadecimal表示十六进制)就是十进制63,同样我们可以使用二进制

mov ax,00111111B

那么问题来了,为什么我们习惯用十六进制而不是十进制呢(二进制太长了),我们来看一张表

或许已经有了些端倪,我们发现任意4比特的二进制,都在范围0000到1111中,也就是十六进制的0-F,所以一个十六进制可以很容易的转化为二进制,即将十六进制的每一位转化为4位二进制位。所以在计算机中使用十六进制既保留了二进制的数的直观性,同时我们使用的时候也更简短,因此十六进制是一份非常不错的选择。

十六进制、十进制互转

十进制到十进制,我们可以使用上面的特点,例如C3H:

12 * 16^1 + 3 * 16^0 = 195

十进制转十六进制和十进制转二进制方法一样,不断的除16取余,直到商为零

坚持原创分享,您的支持将鼓励我不断前行!