Mapping the real world to bits -
计算机终归是为了解决现实问题,而为了解决问题就需要先能够表达问题,进化赋予了我们语言甚至是高于语言的表达,但是一个我们从头去构建的计算机没有被造物主的我们直接赋予表达的能力,而且它能够接受的信号也没有我们直觉上那么多,听觉,视觉,嗅觉,我们可以由这些对应的感觉去表达,但计算机不行,但始终还是要mapping the real world to bits之后才能够再去solving the fucking real world problem,那么计算机的前人们就凭着心智,去探索我们表达更为深层的那些东西。
正如computer词义所言,初始就与compute有着紧密的联系,那么最开始的工作就是把我们的数学大厦的各个基柱,能够让其表达。依托数字电路的发展,我们拥有了用电路表达bits和运算的能力,那么首先要做的,就是把习惯于十进制计算的我们,将计算进行转化到二进制,这样去让电路表达,而依托于表达之上我们就可以实现一个自动的十进制转二进制的过程。C语言也是通过类似的过程去实现的,先通过机器码一步步把其编译过程实现,再通过实现的过程去更高效率的完成语言的实现,在最后阶段再完成语言的自举。
表达的前提是约定,最底层bit过于细节,不能够比较直接的被理解,机器也需要一个约定去表达,先驱们最开始便在位的基础之上抽象出多种数据长度定义,从8位的bytes到64位long,约定之上使得我们可以比较容易的去理解,位定义,长度,字节序,这些最终构成了我们最耳熟能详的编程中数字的概念,标准的约定又使得我们的表达超出数字,可以表示字母,乃至于世界语言。
位数总是有穷的,但是我们计算中也会遇到的浮点数并不是,正如我们多数时候不能直接写出一个浮点数,而只能以分数进行表示一样,用分数去表达,是一个很自然的想法,但是随着位数的增加,我们以2进制为低的表示,也会出现无法表达的情况,但是位数已经够高,对于现实的计算可以忽略那么一点点准确性的程度。最终我们有了IEEE浮点数规范。
这样我们对于现实的表述便有了基石,数字,浮点数,字母,语言,我们便有了在计算机中表达我们现实的能力。