现在大家见得比较多的进制一般就是二进制和十进制。首先作为一名学生用的最多的肯定是十进制,其次作为一名程序猿见得最多的肯定是二进制。但是作为程序猿而言中间还有八进制,后面还有十六进制比如哈希码。
先解释一下什么是进制:所谓通俗的进制就是逢多少进1,比如你上小学的时候,老师总会强调不要忘了进位。
二进制 逢二进一
八进制 逢八进一
十进制 逢十进一
十六进制 逢十六进一
十六进制大家可能比较陌生其实它的前面的数字和十进制是一样的
为0-9
但是等到10以及10以后就变成了ABCDEF。A表示10,B表示11以此类推。
既然谈到了进制的问题,就不可避免的要提到进制换算的问题,这里小数的进制换算比较复杂就先不提了,负数的话,前面我也提到过基本数据类型比如int类型,int类型是四个字节,就是32位,但是我们也了解到int的取值范围是-2^31~2^31 - 1
就是因为32位最左边的那一位是符号位0代表正数,1代表负数
1、二进制转十进制:
这里的算法就是从右往左,从0开始 每一位上的数字乘以2的n次方再相加
2、二进制转八进制
将二进制的数字分成三位一组,每一组按十进制的方式计算,最后拼接起来。
3、二进制转十六进制
将二进制的数字分成四位一组,每一组按十进制的方式计算,最后拼接起来
4、十进制转二进制
十进制的数字每次都去除以一个2,直到商为1的时候结束,然后反着取商和余数,也就是红色数字部分的倒数结果是1111101
5、八进制转二进制
和二进制转八进制相反,每一个数字代表了2进制中的3位,每一个数字都按照十进制转2进制去转换,转换出来的结果不足3位,前面补0,凑齐3位
6、 十六进制转二进制
和八进制转二进制类似,只不过是一位数字变成4位2进制数字
7、八进制转十进制
和二进制转十进制类似,只不过底数从2变成8
8、十六进制转十进制
和二进制转十进制类似,只不过底数从2变成16
9、十进制转八进制
和十进制转二进制类似,除数从2变成8
10、十进制转十六进制
和十进制转二进制类似,除数从2变成16
下面再来提一个概念性的知识:
原码,反码,补码
原码就是参与运算的数字直接转换成二进制
负数的反码: 原码符号位不变,其他位取反
负数的补码:反码+1
正数的原码,反码。补码都是相同的
在java中,所有的运算都是以补码在进行运算
例如:
2+3直接写都是int类型的也就是32位的二进制数
000000000000000..10
000000000000000..11
00000000000000..101 = 5
下面再举一个例子:
比如:2-3=2+(-3)
2的原码:000000000000000..10
下面3的原码反码补码如下:
--
原码100000000000000..11
反码111111111111111..00
补码111111111111111..01
---
结果补码 111111111111111..11
结果反码 111111111111111..10
结果原码 100000000000000..01 = -1
所以最后的结果是-1也就是如果2-3交给计算机去做中间会经过这么多运算。