简单地说1. 计算机内部工作用的是且仅是2进制。所有其他进制都只是给人们看的表达2. 并不是没有32进制,64进制。理论上任何进制都是可以有的,只是人们不需要或者说不用。详细地说比如说十进制的195,在计算机内部工作时候是二进制的11000011,但要写给人们看的时候,总不能写那么多0和1,多麻烦。
而且你一眼也看不出来是多少,他可以写成我们最熟悉的十进制的195。
可惜十进制数位数并不对应确定的2进制数位数,比如8的二进制是1000,11的二进制是1011,二进制都是4位,但十进制一个是1位,一个两位,这样处女座程序员就会很不开心。所以人们就用16进制来表达195成C3,之所以是16进制,是因为他是2的次幂。所以每4位二进制就可以用1位16进制来表示。那么为什么不用32进制呢?
首先,当然可以有32进制,这样每5位二进制就可以用一位32进制的数来表示。(注意这里只比16进制多表达了1位二进制)。那么既然是一个数,我们总要用一个符号来写出来吧,可惜人们只发明了0-9这10个数字,所以对于16进制,10=A,11=B,12=C,13=D,14=E,15=F。也就是借用了6个英文字母。也就是说在和人们最熟悉的十进制转换中,人们需要记住这6个数字和字母的对应,人类还勉强应付的过来。那么对于32进制呢,我们当然也可以用同样的方法,让16=G, 17=H, ... 31= V. 所以你会看到一个数字写成BMW,或者FUCK,然后你会在心中骂,这tm是几。
然后那些cs学生做考卷的时候就会心里暗自诅咒那个说要使用32进制的人。
因为你现在要记忆22个字母和数字的对应去换成你最熟悉的10进制,大大增加了复杂度。却并没有让你对二进制的表达变简单多少。(前面说了只多表达了1位)所以本着no zuo no die的精神不要给自己,也不要给他人找麻烦。
从更深层次的角度说。现在计算机是64位(或32位)的,就是一次可以处理64位的二进制数,所以人们很关心如何表达64位二进制数。
注意64是4的倍数,所以64位二进制数正好可以写成16个16进制数。但是64不是5的倍数,用32进制不能很好表达64位二进制。比4大的下一个能被64整除的数是8,如果要一次表达8位二进制数,这就是256进制。可怜我们的字母也只有26个。所以一个256进制数都找不到很好的符号系统来表达他。
你当然说我们可以创造一套符号,但是again,不要没事找事,特别是没有给人类带来多方便的时候。
所以比较下来,16进制即可以缩减二进制的位数,又可以方便转换到我们熟悉的十进制数,也可以方便的用几个数字和字母写出来。所以成为了计算机学科中常使用的数的表达方式。这个问题其实很像我们有1元,2元,5元,但为什么没有3元,7元的钞票一样。
对于这些完全可以人为决定的事,原则就是与人方便。