一、数制的引入
数制就是计数的方法,指用一组固定的符号和统一的规则来表示数值的方法。
在日常生活中,人们主要使用十进制(0-9),但在某些时候也使用其它进制,如十二进制(如1年有12个月、1打物品有12件),六十进制(如1小时有60分钟、1分钟有60秒),24进制(如一天有24小时)等等。由此,我们引入数制的概念。数制就是多位数码中每一位的构成方法以及从低位向高位的进位规则。
我们在日常生活中主要使用十进制,而计算机中数据的表示只使用二进制,就因为二进制简单只有0和1,计算机逻辑电路处理起来就方便很多。但二进制数码对人来说不便于读写。为了开发程序、阅读机器代码和数据的方便,我们经常使用八进制数和十六进制数来等价地表示二进制数,八进制和十六进制可以看着是二进制的压缩形式。
二、数制的表示
- 十进制(decimal number)
十进制数制的基数是10,从0-9这十个数字;如233表示为两百三十三,常用的表示方式有(233)10 和233D。
- 二进制(binary number)
二进制的基数是2,只有0和1这两个数字;如10010101,常用的表示方式有(10010101)2和10010101B。
- 八进制(october number)
八进制的基数是8,只有0-7这个8个数字;如644,常用的表示方式有(644)8和644O。
- 十六进制(hexadecimal number)
十六进制的基数是16,前十个数字是0-9,后面是ABCDEF,分别表示10、11、12、13、14、15;如9E,常用的表示方式为(9E)16和9EH。
不管哪种进制在计算机中都有其独特的作用,如十进制就是我们经常使用的阿拉伯数字(0-9),二进制是计算机进行逻辑电路运算需要使用(0,1),八进制在一些特殊场所使用,如表示文件权限需要使用(0-7),十六进制是为了程序员在编程时方便阅读自己需要操作的数据,所以把二进制翻译成十六进制,为了方便阅读而设立的。
如果没有十六进制,程序员编程时(例如32位机编程),操作一个数据就要写10….011等32个0或1,很麻烦,因此转换成十六进制(这时他看到的数字就简单了,按照计算机里的补0规范,就是8位数字,如8…1C3)。
PS:基数是指在某种进位计数制中,数位上所能使用的数字符号的个数。
三、数制的计算
十进制的特点就是逢十进一
如:(1010)10 = 1 × 103+0 × 102+1 × 101+0 × 100
二进制的特点就是逢二进一
如:(1010)2 = l × 23+0 × 22+l × 21+0 × 20
八进制的特点就是逢八进一
如:(1010)8 = l × 83+0 × 82+l × 81+0 × 80
十六进制的特点就是逢十六进一
如:(1010)16 = 1 × 163+0 × 162+1 × l61+0 × 160
四、进制的转换
在进制转换之间,不同进制之间的转换使用不同的方法。但是都有一个共同点那就是基本都会用到2的平方。所以熟记2的平方会大大提高自己对于进制转换的能力。下面给出了一些2的平方。如: 20=1,21=2,22=4,23=8,24=16,25=32,26=64,27=128,28=256,29=512,210=1024,211=2048,212=4096,213=8292等等。
将(二、八、十六)进制转换为十进制,就是把各非十进制数按位权展开求和即可。
二转十
1010B = 1× 23+0× 22+1× 21+0×20 = 8 + 0 + 2 + 0 = 10D
八转十
125O = 1 × 82+2× 81+5 × 80 = 64 + 16 + 5 = 85D
十六转十
12BH = 1 × 162+2× 161+B × 160 = 256 + 32 + 11 = 299D
将十进制转换为(二、八、十六)进制,就是使用除余法。
十转二
把十进制利用除余法转为二进制,把十进制125除以2一直取余,直到除尽或无法除时。再把最后一位的商连同余数从下往上进行排序得到的结果就是二进制数;如125D = 1111101B。计算过程如下图:
十转八
把十进制利用除余法转为八进制,把十进制125除以8一直取余,直到除尽或无法除尽时。再把最后一位的商连同余数从下往上进行排序得到的结果就是八进制数;如125D = 175O。计算过程如下图:
十转十六
把十进制利用除余法转为十六进制,把十进制125除以16一直取余,直到除尽或无法除尽时。再把最后一位的商连同余数从下往上进行排序得到的结果就是十六进制数;如125D = 7DH。计算过程如下图:
八转二
八进制转二进制以每一位八进制转换为对应的三位二进制(为什么是三位,因为八进制最大数不会大于八),然后按照顺序合并二进制即可,如八进制125O = 001 010 101B。
二转八
二进制转八进制刚好跟八进制转二进制相反,把二进制按照每三位划分成一位八进制数,然后按照顺序组合即可,如10100110B = 245O
十六转二
十六进制转二进制以每一位十六进制转换为对应的四位二进制(为什么是四位,因为十六进制最大数不会大于16),然后按照顺序合并二进制即可,如十六进制12B = 000100101011B
二转十六
二进制转十六进制刚好跟十六进制转二进制相反,把二进制按照每四位划分成一位十六进制数,然后按照顺序组合即可,如10100110B = A6H
进制之间的相互转换,当你理清楚之后也就不会感觉到它有多难。关键还是需要多多练习,熟练掌握之后,当学习网络IP地址划分时就会容易很多。