首先,先来理解一些概念,计算机底层使用的数制是二进制,用java编程使用的是十进制,但java底层仍使用二进制。不管任何语言,二进制,十进制,十六进制等都是一样的,我们起码都要了解知道,面试中也会有加分的,就像计算机中的01代码,其实就是二进制。
一 十进制
十进制的基本数字0~9,逢十进位。
10称做“基数”,10^n(10的n次幂)被称作“权”。
10000=1×10^4
1000=1×10^3
100=1×10^2
10=1×10^1
1=1×10^0
比如您的工资到手为25678 = 2 * 10^4 + 5 * 10^3 + 6* 10^2 +7 * 10^1 + 8 * 10^0,以10作为基数.
二 二进制
二进制的基本数字是0、1,逢2进位。
二进制的基数为2,权为2^n(2的n次方)
1=1×2^0
10=1×2^1
100=1×2^2
1000=1×2^3
10000=1×2^4
100000=1×2^5
1000000=1×2^6
10000000=1×2^7
比如1111(二进制)=1×2^3+1×2^2+1×2^1+1×2^0=8+4+2+1=15(十进制)
三 十六进制
1、基本数字:0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F(大小写均可)
2、特点:逢十六进位
3、十六进制是二进制的简写, 方便专业人员书写二进制数据。
4、16进制的基数为16,权为16^n(16的n次方)
5、在Java代码中十六进制数用0X或0x做前缀(0是数字零,而不是字母O)
四 十六进制和其他进制的转换
1.十六进制转换为10进制
比如41十六进制转换为10进制如下:
4*16^1 + 1*16^0 = 65(十进制)
2.十六进制转换为二进制
比如41是十六进制,转换为二进制为0100 0001
PS:16进制的1位数代表2进制的4位数,所以说41变成二进制是8位,4的话对应二进制为0100,1对应的二进制为0001
五 二进制转换为其他进制
1.二进制数转十进制
10110为二进制,转换为十进制为 1*2^4+1*2^2+1*2^1 = 22
2.二进制数转十六进制
因为四位二进制数相当于一位十六进制数,所以1101 0110 对应的十六进制应该是2位,1101对应的十进制是1*2^3 + 1*2^2+1*2^0=13,则对应0-F十六进制中的D,同样的方法,则0110 = 1*2^2 + 1 * 2^1 = 6 这个为十进制,6对应十六进制为0到F中 的6,则1101 0110 对应的十六进制为D6.
六 十进制转换为其他进制
1.十进制数转二进制
规律:不断除以2,保留余数,商为0时不再除2.
将所有余数倒序排列。
比如 13转换为二进制过程如下:
13/2
商 6 余数 1
6/2
商 3 余数 0
3/2
商 1 余数 1
1/2
商 0 余数 1
结果:13(十进制)=1101(二进制)
2.十进制数转十六进制
规律:不断除以16,保留余数,商为0时不再除16.将所有余数倒序排序。
比如:138转换为16进制数过程如下:
138/16
商 8 余数 10 A
8/16
商 0 余数 8
结果:138(十进制)=8A(十六进制)
PS:有些面试题是这样的,5 >> 2 是多少,这个意思是5向右移动2位等于多少,很明显考的是二进制,5的二进制为
0101 = 1 * 2^2 + 1 * 2^0 = 5(十进制),向右移动两位后右边01两位移除,前面补两位00,移动后变为0001,则 5 >> 2 = 1(十进制),可以看出向右移动是变小的,即除法,向左移动是变大的,乘法,可以这样总结下:
5 >> 2 等价于 5 / 2^2 = 1(取整数);而 5 << 2 等价于 5 * 2^2 = 20 等价于二进制 010100 = 1 * 2^4 + 1 * 2^2 = 20