电子计算机运算的基础是二进制。你知道,一个普通的开关有“开”和“关”两个位置,抽象来讲,就是能代表两种状态。数学上将这种基于“两种状态”的计数以及运算,称作“二进制”,也就是“逢二进一”。
二进制只有两个数字:0和1。比如,十进制下的0、1、2、3、4,如果转化成二进制,就是000、001、010、011、100。在这个例子里,我们要用二进制表示的数最大是4。要想表示4,就必须至少有三位二进制位,因为两位二进制位表示的最大的数是“11”,也就是十进制的3。
在计算机中“流动”着的数据,归根结底就是用物理的方法表达出的这些二进制状态。比如,半导体芯片中就是利用半导体晶体管对电流、电压的开关的性质来表达二进制的“开关”状态;再比如,过去的拨号上网,就是在只能模拟电压电流高低变化的普通电话线路中,利用调制解调器将计算机的数据流转化成电话线中的电流,来进行数据传递。所有这些,就是为什么一谈到计算机,你会常看到一大串10101011101010110101010...之类的表达方式。计算机中储存、运算、传递的东西,归根结底就是一串又一串只有两个状态的物理信号。
16位和32位的计算机,是指它们处理器处理二进制数据流的能力。中央处理器(CPU)是计算机的大脑,是计算机几乎所有运算和判断产生的地方。16位的计算机处理器,将二进制数据流按照16位一个区段来进行处理。32位处理器,则将二进制数据流按照32位一个单元来进行处理。根据上面我讲的原因,你就可以大概体会到,32位的二进制数字串,能表示的东西要比16位的二进制串多得多,而且要想一步读取32位,其结构也一定比16位的要更复杂,发生错误的概率也更大。
再举一个简单的例子:计算机处理的数据和运用的指令是分开的,也就是说,你存两个数在一个区域,想让它们相加,相加的指令则来自另一个区域;最后加和的结果,则很可能会存储到第三个地方。这个相加的指令,其本身也是需要表达的数据,但不是你要“运算的数据”。于是你会看到,不同的数据,其实有不同的类型。但是不同类型的数据,在计算机中,都有一样的外貌,比方说在32位计算机中,它们都是32个二进制位那么长的一串物理信号组,只不过这两个32位串儿代表加数、另一个32位串儿代表“加法运算”。
再进一步想,现在64位的计算机业已普及,在64位的计算机上,原来32位的软件通常都可以运行。但是在原来32位的计算机上,新出的64位软件就绝对运行不了。简单来讲,就是64位的软件,每一个代码、每一条数据都是64个二进制位那么长;而32位计算机一步只能理解32个二进制位,当然就无法读懂64位软件了。
是指这个软件需要什么样的系统支持,需要和硬件系统、操作系统对应,但一般向下可以兼容,比如32位系统一般可以跑16位软件,64位系统可以跑32位软件,反之,向上就肯定不行。