当前的计算机系统使用的都是二进制数据,它是用0和1两个数字来表示的。进位规则是“逢二进一”,借位规则是“借一当二”。目前用到的所有字符都在计算机中有对应的二进制表现形式,我们用到的一般是UTF-8和GBK码表,能够兼容中英文字符。
在计算机中,还有一些其他的数据表现形式,如:十进制、八进制、十六进制。
进制转换的原理介绍:
1、任意进制----->十进制
2进制转10进制
1110 = 0*2^0 + 1*2^1 + 1*2^2 + 1*2^3 ---> 即以2为底,位数减1的次幂运算(个位次幂为0,十位为1,依次递增),再乘以当前位数值。
= 0 + 2 + 4 + 8 = 14
可以理解为:
1 1 1 0
*
8 4 2 1 = 14
其实8进制,16进制,转换成10进制,也是用此思想。
如8进制的45转10进制:4*8^1+5*8^0=37 ---> 即以8为底,位数减1的次幂运算(个位次幂为0,十位为1,依次递增),再乘以当前位数值。
2、十进制转----->任意进制
10进制转2进制:就是除2运算。8的2进制:8每次除2的余数是0-0-0-1,2进制倒写,即1000。
10进制转8进制:就是除8运算。30的8进制:30每次除8的余数是6-3,8进制倒写,即36。
3、二进制<----->八进制
可以理解为三个2进制表示的10进制数,代表一个8进制位
如:1110 = 001 110 ---> 001表示10进制的1;110表示10进制的6,变成8进制就是16
8进制转2进制就是逆向思维,8进制的52转2进制,5的2进制是101,2的2进制是010,即为101010
4、二进制<----->十六进制
可以理解为四个2进制位表示的10进制数,代表一个16进制位
如:0101 1010 ---> 每四个2进制就是5和10,即5A
16进制转2进制,逆向思维。
5、八进制<----->十六进制
如果需要8进制转16进制,可以把8进制转成2进制,再转成16进制,转换思维即可。
16转8,反向思维。
6、负数的二进制
就是把对应正数的二进制取反,再加1。注:负数的二进制最高位都是1
如:求-6的二进制
6的二进制是110,取反后是11111111-11111111-11111111-11111001,+1就是11111111-11111111-11111111-11111010
所以-6的二进制就是11111111-11111111-11111111-11111010,int型是4个8位。
7、学习过了Integer对象之后,有10进制和任意类型的互相转换。
方法一:10转其它类型
Integer.toBinaryString(int i),10换2
Integer.toOctalString(int i):10转8
Integer.toHexString(int i):10转16
方法二:其它类型转10
Integer.parseInt("需要转换的数",进制形式):把2进制、8进制或16进制转换成10进制。
如:Integer.parseInt("1110",2) --->把2进制的1110转成10进制;
Integer.parseInt("3c",16) --->把16进制的3C转成10进制;
有了此二种方法,对于任意类型进制的互转,比如2进制转8进制,可以先把2转10,再把10转8,用面向对象的思路解决。