可能很多人不知道什么是进制,我摘取了百度百科上的解释:
进制也就是进位计数制,是人为定义的带进位的计数方法(有不带进位的计数方法,比如原始的结绳计数法,唱票时常用的“正”字计数法,以及类似的tally mark计数)。 对于任何一种进制—X进制,就表示每一位置上的数运算时都是逢X进一位。 十进制是逢十进一,十六进制是逢十六进一,二进制就是逢二进一,以此类推,x进制就是逢x进位
我们以后编码过程中也会碰到进制,我们重点掌握4中就行了:二进制 八进制 十进制 十六进制
四种进制从1-20的表示方式(标题数字采用十进制)
十进制 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
二进制 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | 10000 | 10001 | 10010 | 10011 | 10100 |
八进制 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 | 21 | 22 | 23 | 24 |
十六进制 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | a | b | c | d | e | f | 10 | 11 | 12 | 13 | 14 |
从上面的表格我们可以看出二进制中不会出现2,因为逢二进1了。八进制中不会出现八,因为逢八进一了。
这里要特别注意,十六进制中从10-15使用a b c d e f
来表示,这是为了和十进制的数字区别开。
进制的转换我们以后做java编程基本是使用不到了,所以这部分内容可以作为扩展。
4中进制从易到难我们可以分为:十进制转其他进制,二进制转其他进制,八进制转其他进制,十六进制转其他进制。
十进制转其他进制
十进制转二进制 **将十进制123
转换为二进制
解题方法:除2取余,逆序排列
具体做法是:用2整除十进制整数,可以得到一个商和余数;再用2去除商,又会得到一个商和余数,如此进行,直到商为0时为止,然后把先得到的余数作为二进制数的低位有效位,后得到的余数作为二进制数的高位有效位,依次排列起来
那么十进制123转换为二进制最终为:1111011
,这是口语的念法不要念成 一百一十一万一千零一十一,而只能念一 一 一 一零一 一。
十进制转八进制 **将十进制123
转换为八进制
你学会了十进制转二进制,那么转八进制也是一样的,使用 除8取余,逆序排列
结果我们可以看出十进制123转为八进制为:173,同样不要念成一百七十三,而只能念数字一七三。
十进制转十六进制 **将十进制123
转换为十六进制
同理使用 ***除16取余,逆序排列
结果为:7b,这里我们注意十六进制中没有11,而是使用字母b
来代替。
二进制转其他进制
二进制转十进制 将二进制1111011
转换为十进制
原理:求取每一位二进制对应的十进制大小,然后相加得到十进制,注意如果当前位是0则不参加计算
我们使用表格来描述,标题列为二进制数字
二进制 | 1 | 1 | 1 | 1 | 0 | 1 | 1 |
---|---|---|---|---|---|---|---|
每位对应的10进制大小 | 64 | 32 | 16 | 8 | 0 | 2 | 1 |
我们将对应的十进制数字相加:64+32+16+8+0+2+1 = 123 。
***规律:***有一个规律我们要注意:从右向左是乘2倍的增长
二进制转八进制 将二进制1111011
转换为八进制
**原理:这个比较好转,我们采用三位一分方法:从右向左按三位一组分开,高位(左边)不够三位的补0。
二进制: 1111011
分组后: 001 111 011
每一组对应的八进制数字: 1 7 3
最后的八进制数字就是:173
二进制转十六进制 将二进制1111011
转换为十六进制
原理: 转十六进制和八进制一样只不过我们要按四位一分, 从右向左按四位一组分开,高位(左边)不够三位的补0。
二进制: 1111011
分组后: 0111 1011
每一组对应的八进制数字: 7 b
最后的十六进制数字就是:7b
八进制转其他进制
原理: 八进制转其他进制不好转,因此我们可以通过先转二进制,在转其他进制方法
八进制十进制 将八进制173转为二进制
**原理:**将八进制每一位对应的三位二进制写出来,不够三位高位(左边)补0。然后拼接就是二进制了。
八进制; 173
每一位对应的二进制:001 111 011
最后的二进制:1111011
八进制转十进制 将八进制173转为十进制
原理 将八进制先转为二进制再转为十进制:
八进制; 173
每一位对应的二进制: 001 111 011
对应的二进制: 1 1 1 1 0 1 1
每一位二进制对应的十进制数字: 64 32 16 8 0 2 1
相加得到的十进制数字: 123
八进制转十六进制 将八进制173转为十六进制
原理 我们同样先转为二进制,因为二进制对十六进制十四位一分 因此我们只需要将二进制重新分组计算就可以了
八进制: 173
每一位对应的二进制: 001 111 011
对应的二进制: 1111011
重新4位一分: 0111 1011
对应的十六进制: 7 b
十六进制转其他进制
十六进制转其他进制和八进制转其他进制雷同。
十六进制转二进制 将十六进制7b转为二进制
十六进制: 7b
每一位对应的二进制: 0111 1011
对应的二进制: 1111011
十六进制转十进制 将十六进制7b转为十进制
原理: 十六进制同样是先转二进制再转十进制
十六进制: 7b
每一位对应的二进制: 0111 1011
对应的二进制: 1111011
每一位的十进制数字: 64 32 16 8 0 2 1
相加得到的十进制数字: 123
十六进制转八进制 将十六进制7b转为八进制
十六进制: 7b
每一位对应的二进制: 0111 1011
对应的二进制: 1111011
重新三位一分: 001 111 011
对应的八进制: 1 7 3
有时候我们在写代码的时候需要标明该数字是哪个进制,我们需要如下标明:
public class Hello{ //Hello要和文件名一致,否则运行会报错
public static void main(String args[]){
//java不支持二进制的标识,因此你没有办法在java中直接写二进制数字。
//不标识默认为十进制,打印结果:123
System.out.println(123);
/**
八进制使用0标识,注意前面那个0就标识是八进制,所以是八进制的一七三,
而不是一百七十三。打印结果:123
**/
System.out.println(0173);
//十六进制使用0x标识,这里表示十六进制的7b,打印结果:123
System.out.println(0x7b);
}
}
注意: