咱们都知道十进制是“逢10进1 ”,同理,N进制就是 “逢N进1”。进制其实就这么简单。它的麻烦之处在于各种进制之间的转换。
一、十进制整数转N进制
1.十进制转二进制
除2取余法:连续除以2,直到商为0,逆序排列余数。
例如十进制数57转为二进制数:
|   序号  |   被除数  |   商  |   余数  |   备注  | 
|   1  |   57  |   28  |   1  |   57除以2得28余1  | 
|   2  |   28  |   14  |   0  |   28除以2得14余0  | 
|   3  |   14  |   7  |   0  |   14除以2得7余0  | 
|   4  |   7  |   3  |   1  |   7除以2得3余1  | 
|   5  |   3  |   1  |   1  |   3除以2得1余1  | 
|   6  |   1  |   2  |   1  |   1除以2得0余1(商为0,结束)  | 
逆序排列余数(从下往上)得到二进制数:111001B。
注意除2取余每次都是用上次的商作为被除数,即:取商除2取余。
2.十进制转二进制
十进制转N进制与转二进制算法如出一辙,即除n取余法。
比如把十进制数107转换成八进制:
107除以8等于13,余数是3;
13除以8等于1,余数是5;
1除以8等于0,余数是1。
把这些余数倒序排列,就是153,这就是十进制数107的八进制表示。
二、N进制整数转十进制数
1.二进制转十进制
按位权展开:各位数字乘以位权的和。
这是因为现行的计数方法都是采用“位值法(Positional Value Algorithm)”,它的特点是各位数字所表示值的大小不仅与该数字本身的大小有关,还与该数字所在的位置有关。位置所代表的权重称为位权,简称权。
看似很高大上,但其实这种表示方法我们非常熟悉,比如:9527=9*1000+5*100+2*10+7。
上面算式中的1000、100、10、1就是位权,因此我们可以得到一个公式:数=∑数字*位权。
1000、100、10、1分别对应10^3、10^2、10^1、10^0,这下你看出门道没?底数代表进制,指数代表位置(从个位起向左依次为0、1、2、……)。
那么,你自然能联想到,二进制位权的底数就应该是2。
如二进制数111001.000B数字与位权的对应关系:

按位权展开求和即可得到对应的十进制数:
![]()
其实,本质上来说,位值法的位权表示的是倍数关系:每一位都是后一位的N倍。N就是指N进制,十进制就表示每一位是后一位的10倍,二进制就表示每一位是后一位的2倍。这其实就是位权展开法的原理。
2.N进制转十进制
其他进制数转十进制数同理,八进制数的位权是以8为底的幂,十六进制数的位权是以16为底的幂。位权的底数部分被称为“基数”,二进制的基数是2,十进制的基数是10,八进进制的基数是8,十六进制的基数是16。
比如8进制数字153,按位权展开求和为:
![]()
三、进制快捷转换
因2的3次方是8,所以二进制转为八进制时,可3个一组进行转换,每组内位权的指数编号重新从零开始计算。如111001B转为八进制数:
![]()
同理,由于2的4次方是16,二进制转十六进制时,可4个一组进行转换(优先满足右侧分组,因为最高位可以补零),如111001B转为十六进制数:
![]()
四、十进制小数转二进制数
与整数“除2取余法”的门道儿正相反,采用“乘2取整法”。
乘2取整法:用2乘十进制小数,将积的整数部分取出,再用2乘余下的小数部分,如此循环,将每步取出的整数部分顺序排列,即为小数的二进制。
例如,十进制数32.12转为二进制数:
整数部分32用除2取余得到二进制数为100000。
小数部分为0.12,用乘2取整法:
|   序号  |   乘2  |   取整  |   备注  | 
|   1  |   0.12×2=0.24  |   0  | |
|   2  |   0.24×2=0.48  |   0  | |
|   3  |   0.48×2=0.96  |   0  | |
|   4  |   0.96×2=1.92  |   1  |   取整后,后续运算因数变为1.92-1=0.92  | 
|   5  |   0.92×2=1.84  |   1  |   取整后,后续运算因数变为1.84-1=0.84  | 
|   6  |   0.84×2=1.68  |   1  |   取整后,后续运算因数变为1.68-1=0.68  | 
|   7  |   …  |   …  |   …  | 
注意乘2取整每次都是用上次积的小数部分作为乘数,即:取小乘2取整。
与整数不同的是,乘2取整可能会无限运算下去,需按题目精度要求截取足够位数。
顺序排列(从上到下)取出整数,得到小数部分的二进制数为.000111。
故最终求得二进制小数:100000.000111。
总结:整数部分,除2取余、逆序排列;小数部分,乘2取整、顺序排列。


















