进制:
作用:用于对接其他设备,其他设备采用的进制不一样,例如:计算机是二进制、人是十进制,部分硬件是8进制
含义:十进制:逢十进一
常见进制:二进制、八进制、十进制、十六进制
十六进制:0-9,A-F
在idea里的写法:(JDK7以后才支持)
十进制:默认
二进制:在数值前面以0b开头(b大小写都可以)
八进制:数值前面以0开头
十六进制:在数值前面以0x开头(x大小写都可以)
注意:以上在idea里的展现形式都是以十进制展现的
进制转换:
十进制:
任意进制 转换到 十进制 : 系数 * 基数的 全次幂 相加
十进制 转换到 任意进制 : 除基取余法
任意进制 转换到 十进制
可以套用下面公式
公式:系数 * 基数的 全次幂 相加
系数:每一 “位” 上的数
基数:几进制就是几
权:从数值的右侧,以0开始,逐个+1增加
例如:二进制转十进制
0b100
拆解:0b为二进制标识
系数:1 0 0
基数:2(当前是二进制)
权:从 右侧 开始,以0为编号,逐个+1
套公式:
0 * 2^0 = 0
0 * 2^1 = 0
1 * 2^2 = 4
最终等式右侧所有结果相加,为十进制4。
同理:
0100 = 64
0x100 = 256
十进制 转换到 任意进制
公式:除基取余法
使用数据源,不断除以基数(几进制,基数就是几),得到余数,直到商为0,再将余数倒着拼起来即可
例如:
十进制60 转到 十六进制
16 |_60_
16 |_3_(商) 余数为12
0(商) 余数为3
余数从下往上取,拼接起来
3 C(由于十六进制的10-15由A-F表示)
所以十进制60 转成 十六进制为3C
二进制:
快速进制转换法(只能用于二进制):8421码(又称BCD码)
二进制数 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
二进制转十进制 | 1 * 2^7 | 1 * 2^6 | 1 * 2^5 | 1 * 2^4 | 1 * 2^3 | 1 * 2^2 | 1 * 2^1 | 1 * 2^0 |
十进制数 | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
byte的取值范围为:-128~127
此处解释一下,为什么用8位数 0000 0000或1111 1111来计算,因为计算机的最小存储单元为字节(byte),一个字节(byte)由8个比特(bit)组成,每一个比特都是二进制位,0和1表示。
由于是由1转过来的,所以只需要看二进制数是否有1,
且十六进制的15最高位为1111,所以取后面(由 “公式:系数 * 基数的 全次幂 相加” 右边往左+1的原因,所以取后面)4位数,叫8421码
例如:
二进制1101
8421码(十进制数) | 128 | 64 | 32 | 16 | 8 | 4 | 2 | 1 |
二进制 | 1 | 1 | 0 | 1 |
直接将1比对的数值取出后相加(0不取),最终十进制数为8+4+1等于13
所以二进制1101 转十进制为 13
二进制 转 八进制
八进制:将 三个 二进制位 为一组(3个为一组看,每一组都要用新的8421码表看),再进行转换
原因:八进制逢八进一,三个二进制位最多可以表达111,也就是数值7(十进制),如果出现第四位二进制,就超范围了(八进制逢八进一)
8421码(十进制数) | 8 | 4 | 2 | 1 |
二进制 | 1 | 1 | 1 | 1 |
结果为7 | 不取 | 4 | 2 | 1 |
例如:
十进制60的二进制0b111100 转 八进制
拆解:
三个为一组,每组从新对应8421码
三个为一组: 1 1 1 1 0 0
每组对应8421码:4 2 1 4 2 1
取值相加后每组结果拼接起来: 4+2+1 4+0+0 = 7 4
结果为74
二进制 转 十六进制(注意:十六进制0-9为数字,10-15为英文A-F)
十六进制:将 四个 二进制位 为一组(4个为一组看,每一组都要用新的8421码表看),再进行转换
原因:十六进制逢十六进一,四个二进制位最多可以表达1111,也就是数值15(十进制),如果出现第五位二进制,就超范围了(八进制逢八进一)
8421码(十进制数) | 16 | 8 | 4 | 2 | 1 |
二进制 | 1 | 1 | 1 | 1 | 1 |
结果为15 | 不取 | 8 | 4 | 2 | 1 |
例如:
十进制60的二进制0x111100 转 十六进制
拆解:
四个为一组,每组从新对应8421码
四个为一组: 0 0 1 1 1 1 0 0 (前面没有位自动补齐)
每组对应8421码:0 0 2 1 8 4 2 1
取值相加后每组结果拼接起来: 0+0+2+1 8+4+0+0 = 3 C(十六进制数字12以C表示)
结果为3C