前言
众所周知,计算机存储数据和运算都要使用二进制表示,如010111001,1和0其实也是一种表示方式,用来表示计算机的高电平和低电平
但是在java中如果数据都用0101011100这种来表示显然不直观,所以就引出了我们今天的主题,进制转换,那么计算机中有哪几种进制表示呢?
答案是最基本的二进制和八进制、十进制、十六进制
何为二进制?即逢二进一,所以二进制的表示全是有0、1组成,其余进制同理
那么为何是八进制、十六进制呢?
因为3位二进制数即可表示1位八进制数,4位二进制数即可表示1位十六进制数,纯粹是为了表示的简洁方便!
二进制与十进制之间的转换
二进制转十进制
以0101为例,从右往左,二进制位数分别乘以2的次幂(次幂从0开始依次递增)并求和,如下例
所以0101=5,下面代码亦可以验证
System.out.println("5的二进制数为:" + Integer.toBinaryString(5));
5的二进制数为:101
十进制转二进制
十进制转二进制也就是除2取余
二进制与八进制、十六进制的转换
二进制转八进制
因为3位二进制的最大值是7,八进制是逢8进1,所以八进制最大数字是7,则可以用3位二进制来表示1位八进制
如010111011,结果如下图
010111011的八进制值位273
java中表示八进制以数字0开头,用以区分十进制
所以八进制数273在java中就用0273表示
由图可验证计算正确
同理010111011转十六进制,4位为一组转换成十六进制
1011 1011 = bb b代表十进制数字11
java中以 0x开头表示十六进制数据 0xbb
十六进制标识符为0-9 和a-f
负数的二进制表现形式
有十进制转二进制可知 6 = 110,那么 -6 的表现形式就是6的二进制数取反+1
由于int型在计算机中占4个字节,所以6实际在计算机中表现形式为
0000 0000 0000 0000 0000 0000 0000 0110
取反结果为
1111 1111 1111 1111 1111 1111 1111 1001
+1 最终结果为
1111 1111 1111 1111 1111 1111 1111 1010