黑马程序员-----------------进制间的转换

android培训java培训、期待与您交流!

进制: 在计算机中所有数据都是用二进制存储的,一个整数也是用二进制但是是用一串1,0组合的数据表示的。

进制的表现形式主要是4种:二进制(0,1)、八进制(0,1,2,3,4,5,6,7)、十进制(0,1,2,3,4,5,6,7,8,9)、十六进制。


二进制--->十进制

原理:二进制乘以2的过程,从右往左分别乘以2(顺序的次幂)

即:00001011 ->>11

过程:1*2(0)+1*2(1)+0*2(2)+1*2(3) =1+2+0+8=11


二进制--->八进制

原理:每一位8进制数最大值为7,在进行转换的时候二进制的每三位组成一个8进制数。

例如:00001011--->13

过程:011 =1*2(0)+1*2(1) +0*2(2)=3

    001= 1*2(0)+0*2(1)+0*2(2) = 1

即00001011--->13

二进制--->十六进制

原理:二进制中4个为一位16进制数.

十六进制中的元素为0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F

例如:1011

 1011 = 1*2(0)+1*2(1) +0*2(2)+1*2(3) = 11 ,11在十六进制中对应的数据是B

因此00001011--->B


十进制--->二进制

原理:对十进制数进行除二运算,取每次除2的余数直到

即:11-->1011

过程:11/2 =5 余数为1,

               5/2=2 余数为1,

2/2=1 余数为0,

1不能再除2 就是1

所以11的二进制1011

代码演示:

public class HexDemo {
	public static void main(String[] args) {
		toBin(11);
	}
	public static void toBin(int num)
	{	
		//定义一个存储每次num%2取余的数据容器
		StringBuffer sbf = new StringBuffer();
		
		while(num>0)
		{
			//把次num%2取余的数据添加进容器
			sbf.append(num%2);
			//用num/2的商进行下一次预算
			num = num/2;
		}
		//打印结果,利用容器的反转功能将结果反转成二进制数
		System.out.println(sbf.reverse());
	}
}

十进制--->八进制原理:当计算机运行的时候十进制会先转成二进制数存储,然后利用二进制转换八进制的原理进行运算,每次&7,向右3位。

   001-011&000-111 =7

----------------------------------------------------------------------

  000-011 = 3

将001-011右移3位,在&7

000-001

      &000-111 =7

----------------------------------------------------------------------

000-001 =1

结果就是13;

代码演示

public class OctDemo {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		toOct(11);
	}
	public static void toOct(int num)
	{
		//定义一个数组用来存放八进制元素
		char[] chs = {'0','1','2','3','4','5','6','7'};
		//定义一个数组存储每次 num&15的数据容器
		char[] arr = new char[8];
		//定义一个操作数组的指针
		int pos = arr.length;
		while(num!=0)
		{	
			
			int n = num&7;
			//每次存得到数组中最后一位数据
			arr[--pos] = chs[n];
			//每次向右移3位
			num = num >>> 3;
			
		}
		//打印存储数据数组
		for (int i = pos; i < arr.length; i++) {
			System.out.print(arr[i]);
		}
		
		//System.out.println(sbf.reverse());
	}
}


十进制--->十六进制
原理:当计算机运行的时候十进制会先转成二进制数存储,然后利用二进制转换十六进制的原理进行运算,十六进制中的元素最大角标为15,
因此我们可以利用一个表来进行查看对应数据,每次&15以后再向由移4位
0 1 2 3 4 5 6 7 8 9 A B   C   D   E   F
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

以十进制数11来进行分析

0000-0000 0000-0000 0000-0000 0000-1011   -------->11的二进制数

     &0000-0000 0000-0000 0000-0000 0000-1111 =15

----------------------------------------------------------------------

0000-00000 0000-0000 0000-0000 0000-1011 = 11 去查找十六进制中角标为11的元素 B

右移4位&15 结果0000-0000 0000-0000 0000-0000 0000 =0

最后结果就是B

代码演示

public class HexDemo1 {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		toHex(60);
	}
	public static void toHex(int num)
	{
		//定义一个数组用来存放十六进制元素
		char[] chs = {'0','1','2','3','4','5','6','7',
				'8','9','A','B','C','D','E','F'};
		//定义一个数组存储每次 num&15的数据容器
		char[] arr = new char[8];
		//定义一个操作数组的指针
		int pos = arr.length;
		while(num!=0)
		{
			int n = num&15;
			//每次存得到数组中最后一位数据
			arr[--pos] = chs[n];
			num = num >>> 4;
			
		}
		//打印存储数据数组
		for (int i = pos; i < arr.length; i++) {
			System.out.print(arr[i]);
		}
		
		//System.out.println(sbf.reverse());
	}

}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同步。【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、MATLAB、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。 【适用人群】:适用于希望学习不同技术领域的小白或阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上行修改和扩展,实现其他功能。 【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同步。【项目资源
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值