Java基础之进制转换

1 进制基础

概念

​ 进制就是进位制,是人们规定的一种进位方法,二进制逢2进1,八进制是逢8进1,十进制逢10进1,十六进制逢16进1。

不同进制形式:

  • 二进制 0b或0B开头,由0和1组成

  • 八进制 0开头,由0、1…6、7组成

  • 十进制 常见整数,由0、1…8、9组成

  • 十六进制 0x或0X开头,由0、1…8、9、a、b、c、d、e、f组成,大小写不区分

案例描述:

package com.briup.chap02;

public class Test063_Binary {
	public static void main(String[] args) {
		byte b1 = 0b01100001;	//二进制
		byte b2 = 97;			//十进制
		byte b3 = 0141;			//八进制
		byte b4 = 0x61;			//十六进制

		//打印出来结果全是97,为什么?
		System.out.println(b1);
		System.out.println(b2);
		System.out.println(b3);
		System.out.println(b4);
	}
}

注意:不论什么类型的数据值,在计算机的底层存储时,统一按照二进制形式存储!

上述案例中,0b01100001、97、0141、0x61在计算机底层存储时,都是按二进制存储的,其值按照十进制表示,都是97。

思考:如何将2进制、8进制、10进制、16进制数进行转换呢?

2 进制转换

1)任意进制转换为10进制

转换方式:

结果值 = 系数*基数的权次幂相加

​ 系数:每一位上的数据

​ 基数:X进制,基数就是X

​ 权:最右边那位对应0,每左移一位加1

案例展示

// 97:系数为9和7,基数为10,权是0和1
97: 7*10^0 + 9*10^1 = 7 + 90 = 97
    
0b01100001: 1*2^0 + 0*2^1 + 0*2^2 + 0*2^3 + 0*2^4 + 1*2^5 + 1*2^6 
    = 1 + 32 + 64 = 97

01411*8^0 + 4*8^1 + 1*8^2 = 1 + 32 + 64 = 97 

// 0x61:系数为6和1,基数为16,权是0和1
0x611*16^0 + 6*16^1 = 1 + 96 = 97

变量内存理解

在这里插入图片描述

2)十进制转换为其他进制

除积倒取余,具体计算过程如下:

在这里插入图片描述

16进制也是一样的换算方式。

3)十进制到二进制的快速转换

对于不太大的正整数,我们可以采用一种快捷的方式(8421码)来获取其2进制形式,如下图:

在这里插入图片描述
在这里插入图片描述

上图运算步骤解析

  • 拆解正整数,将其分解为2的指数倍相加
  • 找出2的指数倍 对应的 二进制1
  • 根据变量类型确定占用的字节数及比特位,组合得到最终的二进制形式

4)二进制转换为8、16进制

2进制转化为8进制

  • 从最低位开始,每3位分一组,不足3位的话高位补0

  • 将得到的数字组合到一起,最前面以0开头

案例展示:

//定义变量
byte b = 126;

//获取其二进制形式
// 126 = 127 - 1 或 64 + 32 + 16 + 8 + 4 + 2
// 	0b 0111 1110 
//2进制 -> 8进制   
//a.从最低位开始,每3位分一组,不足3位则高位补0
//	001 111 110
//	 1   7   6
//b.最后组合到一起,最前面以0开头
//结果:0176
byte b2 = 0176;
System.out.println(b == b2);

2进制转换为16进制

  • 从最低位开始,每4位分一组,不足4位的话高位补0

  • 将得到的数字组合到一起,最前面以0x开头

案例展示:

//定义变量
byte b = 126;

//二进制形式:0b 0111 1110 
//2进制 -> 16进制   
//a.从最低位开始,每4位分一组,不足4位则高位补0
//	0000 0111 1110
//	  0    7   e(14)		其中a:10 b:11 c:12 d:13 e:14 f:15
//b.最后组合到一起,最前面以0x开头
//结果:0x07e
byte b2 = 0x07e;
System.out.println(b == b2);
  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值