前几天敲代码遇到进制转换的问题,虽然很多语言已经帮我们封装好API提供给我们使用,让我们方便的进行进制转换。但做为一个富有钻研精神的小码农,决定研究转换规律,并封装好以便使用。
首先理解下进制的概念:
我个人把进制理解为一个单位。比如说,2进制便是两个作为一组,4进制就是4个作为一组或一个单位,n进制就是n个作为一个单位。
十进制转N进制:
首先我们了解下十进制转二进制,举个例子,100转二进制:
从上面我们知道二进制就是2个作为一组,那我们首先用100整除2就可以知道有多少个二进制组。咳咳,不知道这样说有没有误导你们。就像这样:
100/2=50···0
50/2=25···0
25/2=12···1
12/2=6···0
6/2=3···0
3/2=1···1
1/3=0···1
通过这样不断的整除,直到商为0,然后我们把余数从下到上串起来为:1100100 ,这是100转为二进制的样子。十进制转其他进制也是一样的,例如100转7:
100/7=14···2
14/7=2···0
2/7=0···2
答案是202,可以反向验证一下:202(7)=2x7^2+0x7+2x7^0=98+0+2=100(10),对的哈哈。
所以十进制转N进制可以表示为:
100/N=商1···余数1
商1/N=商2···余数2
......
商n/N=0···余数n
就是这样的过程。
用程序可以表示为(java实现):
/**
* @param value 需转换的十进制
* @param n n进制
* @return
*/
static int _10_to_N(int value,int n){
String nStr="";
int i=value;
while(i!=0){
nStr=i%n+nStr;//取模跟在前面
i=i/n;
}
return Integer.parseInt(nStr);//字符串转int,并返回
}
调用:
int nValue= _10_to_N(100,2);