进制

学电脑的人如果不懂进制,可真有点象法国人不知道拿破仑,美国人不知道华盛顿一样。既然进制这么重要,那么,什么是进制呢?其实,我们时时刻刻都在用进制。如我们拿东西点数时,总是这样记:1,2,3,4,5,6,7,8,9。。。且慢,我们记到9时,再也不能用一个数来记了,不得不用10来记,即俗称的逢十进一,这就是十进制的由来。人为啥要用十进制呢?这是因为我们有十个手指。在远古,没啥纸笔,只好靠弯手指头来计数,当十个指头全部用完后,不得不再在别的地方用草绳打个结,然后手指头伸直后又重新来过。这样,从远古流传到今,我们一直就用十进制。可见,用啥进制,主要是视方便而定。比如,中国道家的创始人老子就认为世界开始是一体的,然后通过阴阳两气来相生万物,为此,他就设计了一个二进制来描述这个现象:一体生两仪,两仪生四象,四象生八卦,对应我们的十进制来说,就有点象一进十,十进百,百进千。如果我们仔细观察一下,就会发现对二进制来说1=20,2=21,4=22,8=23,对于十进制来说就是1=100,10=101,100=102,1000=103,可见任何一个进制,其某一位代表的值就是该位在数中进制值的从0计算起的位数的次方。这句话可有点难懂,就让我举个例子来现形说法吧。比如对于十进制数892来说,它的值就是8乘以10的二次方(从右至左,0位算起,8在第二位)再加上9乘以10的一次方(从0位算起,8为第二位,9为第一位,2为零位),最后加上2乘以10的零次方,即8*102 + 9*101 + 2*100。如果该数是十六进制,那么它代表的值就是8乘以16的二次方再加上9乘以16的一次方,最后加上2乘以16的零次方,即8*162 + 9*161 + 2*160,等于8*256+9*16+2,化成十进制数就成了2194。再比如,对于十进制数1010来说,它的值应该是1*103 + 0*102 + 1*101 + 0*100。如果该数是二进制,它的值就应为1*23 + 0*22 + 1*21 + 0*20,等于1*8 + 0*4 +1*2 + 0*1,化成十进制数就成了10。

在电脑里,它的计数方法是二进制。这是因为它觉得用二进制方便。原因很简单,因为电脑没有十个指头,它有的是开关。而我们知道,开关就只有两个状态,通或不通,如果用1来表示通,0来表示不通(或正好相反),上面讲到的二进制数1010就要用四个开关来表达。在电脑里,我们将一个这样的开关称之为一个Bit(比特),连续在一起的八个这样的开关称为一个Byte(字节)。将许许多多的开关集成在一起,就称之为集成电路(Integrated Circuit)。诚如你所看到的,用二进制数来表达一个稍大的一个数需要很多位,写起来可真够麻烦的。因此,人们为了兼顾电脑与人类的不同需要,就将16进制数来作为人与电脑交往的主要桥梁。这是因为4位二进制数所能表达的值是从0到15,正好相当于一位16进制数,从二进制数转成16进制数方便。并且16进制比起十进制来,每位能表达的数更大。为了节省符号,人们就用A、B、C、D、E、F或a、b、c、d、e、f来分别表示10、11、12、13、14、15 六个数。这样,在16进数里,形如 A8E 的数表达的值化成十进制的值就为 10*162 + 8*161 + 14*160 等于10*256 + 8*16 +14=2702。如果将之转成二进制,就很简单,因为10(A)在二进制就是1010,8在二进制为1000,14(E)在二进制就是1110,所以整个转起来就是1010 1000 1110。为了说明数的进制,在vb里,用&H放在数据前表明后面是16进制,如 &Ha2 就表示a2是16进制数,当然有时我们还在数后再添上符号 & 来表示数的结束。如 &h12&,&H23&,&h34都是合格的16进制数。从上可看出,一个字节(Byte)需要两个16进制数来表示,其表达的数据范围为0到255(28-1)共256个数。如果将其中的一位作为数的符号,如0表示正数,1表示负数,那么,它能表达的数的范围就是(-127到127)。电脑里的开关这么多,也即二进制数这么多,它一次操作可不能只读取或拨动一个开关,就象我们不可能一分钟一节课一样。我们把电脑里一次读取或操作二进制数的位数称为一个字(Word)长,一个字长的二进制数合在一起称为一个字。有时,我们按电脑一次性能操作二进制数的位数来区分电脑,如8位机,16位机,32位机,64位机等。一般来说,家电里控制用电脑多为8位单片机,许多数码产品里的电脑多为16位单片机,如DVD等,高档一点的多为32位机,如家用电脑,手机,机顶盒等。更高一点的就是企业用的服务器,一般在64位或以上。由于软件是建立在硬件基础上的,自然,软件一次能操作二进制数的位数只能低于或等于硬件的位数,如早期的家用电脑为16位机,在其上工作的操作系统Dos( Diskette Operation System,磁盘操作系统)就是16位的,后来硬件发展到32位,在其上工作的Windows 3.1,Windows 95还是16位,只是发展到Windows NT,Windows 2000才真正转成32位。  

其实,无论是二进制还是16进制,其发明者都是中国人。我们的成语里说的"半斤八两"就是说半斤等于八两,用来形容两者水平差不多,这句话源于我国在中华民国前一直沿用的计量16进制。可惜的是,如同火药、火箭的发明一样,中华民族没有将这些发明沿伸下去,发明对人类更为有用的技术,以至于近代积贫积弱,遭人欺凌。我说这些,是希望学习本软件的人不应局限于本软件所讲述的知识,而应与其他所学相结合,将之发扬广大。

上面,我们讲到的都是从其他进制化成十进制,那么,怎样从十进制数化成其他进制呢?其实,我们只要将之转成16进制,其他进制就很容易了。因此,下面就用十进制转成16进制为例来说明:

我们已经看到,从其他进制化成十进制用乘法,因此,反过来,从十进制转成16进制就应用除法,具体就用十进制数2194来说明是如何转化成16进制的。首先,用2194整除16,得商137,余数是2,记做16制数的0位,再用上次运算的商137来整除16,再得商8,余数为9,将余数9作为16制数的1位,再用上次的商8整除16,得商为0,余数为8,将8记作为16制数的2位,到此,转换完毕,结果就为892,大家想一想,这样转换的道理何在?

由于在电脑里用到的是二进制,因此,二进制数的加减乘除等运算在电脑里就显得额外重要了。因此,你需要好好学学以后谈到的布尔运算,它在数字电路里特别有用。

另外,负数在电脑里一般用补码的形式存在,如-1的补码为1111 1111 1111 1111,有兴趣的人可找相关资料看一看。

 

lotus pond_monk