26.进制

1.进制基础知识

常见进制的数据组成:

二进制:由0,1组成。在Java中以0b开头

八进制:由01234567组成。在Java中以0开头

十进制:由123456789组成。整数默认是十进制的

十六进制:由123456789ABCDEF(大小写均可)。在Java中以0x开头

 
 

1.1 进制转换

1.1.1 R进制到十进制的转换

规则:按权展开法(系数*基数的权次幂 相加)
● 系数:每一【位】上的数
● 基数:R进制,基数就是R
● 权:从数值的右侧,以0开始编号,对应位上的编号就是该位上的权
● 举例:0b101010
0b101010 = 1*2^5 + 0*2^4 + 1*2^3 + 0*2^2 + 1*2^1 + 0*2^0 = 42

● 练习:计算下列数据对应的十进制的值
052,0x2A

5*8^1 + 2*8^0 = 42
2*16^1 + 10*16^0 = 42

1.1.2 十进制到R进制的转换

规则:重复相除法(除基取余,直到商为0,余数反转)

● 把42转换为二进制
● 42 = 0b101010在这里插入图片描述
● 练习:计算42数据对应的八进制和十六进制的值
052
0x2A

如何实现二进制和十进制之间的快速转换呢?

采用8421码就可以实现

8421码:
是BCD代码中最常用的一种
BCD:(Binary-Coded Decimal)二进制码十进制数,在这种编码方式中,每一位二进制值代码的1都是代表一个固定数值,把每一位的1代表的十进制数加起来得到的结果就是它所代表的十进制数码

二进制到八进制如何转换呢?

思路1:把二进制转换为十进制,然后再把该十进制转换为八进制

思路2:三位组合法
        把二进制的数据,从右开始,每3位一组合,最左边不够的时候,补0
        然后,分别计算对应的十进制数值
        最后,从左往右,把每个十进制的数据组合起来,就是一个八进制数据

二进制:0b101010
拆分:    101    010
计算:      5        2
组合:          52
八进制:052

从八进制到二进制只需要把每一位都换成3位的二进制就可以了

二进制到十六进制如何转换呢?

四位组合法:
        把二进制的数据,从右开始,每4位一组合,最左边不够的时候,补0
        然后,分别计算对应的十进制数值
        最后,从左往右,把每个十进制的数据组合起来,就是一个十六进制数据

同八进制与二进制的关系异曲同工

2.Java内置的进制转换:

java.lang.Integer类中的静态方法:

public static String toBinaryString(int i):在基数2中返回整数参数的字符串表示形式为无符号整数
public static String toOctalString(int i):在基数8中返回整数参数的字符串表示形式为无符号整数
public static String toHexString(int i):返回整数参数的字符串表示形式,作为16位中的无符号整数

public static String toString(int i,int radix):返回由第二个参数指定的基数中的第一个参数的字符串表示形式

3.有符号数据表示法

原码、反码、补码

4.整数强制转换之数据溢出

byte b = 130;在编译器中会显示编译失败,因为130是int类型的
所以我们加一个强制类型转换
byte b = (byte)130;
输出b会发现输出的是-126

下面我们对此做出分析:
int占4个字节,130用原码表示为:00000000 00000000 00000000 10000010
由于是正数,所以补码与原码相同
接下来强转位byte类型,即截取8位
补码:10000010
先转为反码:10000001
再转为原码:11111110 ->最高位是符号位->-126

5.浮点数存储

二进制浮点数转换为十进制浮点数

规则:按权展开法(系数*基数的权次幂相加)

● 系数:每一【位】上的数
● 基数:R进制,基数就是R
● 权:
        整数部分:从小数点左侧,以0开始编号,对应位上的编号就是该位上的权
        小数部分:从小数点右侧,以-1开始编号,对应位上的编号就是该位上的权
● 举例:把二进制浮点数110.101转换为十进制浮点数
        110.101 = 1*2^2 + 1*2^1 + 0*2^0 + 1*2^-1 + 0*2^-2 + 1*2^-3 = 6.625

十进制浮点数转换为二进制浮点数

规则:整数部分重复相除法,小数部分重复相乘法

● 整数部分重复相除法:除基取余,直到商位0,余数反转
● 小数部分重复相乘法:乘基取整,知道小数位0或者达到指定精度位,整数顺序排列
● 举例:把十进制浮点数6.625转换为二进制浮点数

整数部分:110
小数部分:

0.625 * 2 = 1.25 取整:1  ↓
0.25 * 2 = 0.5     取整:0  ↓
0.5 * 2 = 1          取整:1  ↓
小数部分:101

练习:

● 把二进制浮点数1010.0101转换为十进制浮点数
1*2^3 + 1*2^1 + 1*2^-2 + 1*2^-4 = 10.3125
● 把十进制浮点数10.3125转换为二进制浮点数
1010.0101

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值