十进制转十六进制,十进制转二进制

题目:十进制转为十六进制
十进制转为二进制
/**
进制转换
author: Zelmira
date: 2019/8/21
*/
运行结果:
在这里插入图片描述
代码:(一共写了5个方法)


class JinZhi{
	public static void main(String[] args){
		System.out.println("6转二进制--------");
		toBin(6);
		System.out.println();
		System.out.println("-6转二进制--------");
		toBin2(-6);
		System.out.println();
		System.out.println("60转十六进制--------");
		toHex(60);
		toHex2(60);
		System.out.println();
		System.out.println("-60转十六进制--------");
		toHex3(-60);
	}

	/*
	十进制——十六进制
	查表法:
	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
	将所有的元素临时存储起来,建立对应关系
	每一次&15后的值作为索引去查建立好的表,就可以找对应的元素
	这样比 -10+‘a’简单的多
	可以通过数据的形式来定义

	发现结果是反过来的,使用数组来存储并进行反转
	(可计算负数)
	*/
	public static void toHex3(int num){
		//定义一个临时容器
		char[] arr=new char[8];
		//定义角标
		int pos=0;
		char[] chs = {'0','1','2','3'
			,'4','5','6','7'
			,'8','9','A','B'
			,'C','D','E','F'
			};
		while(num!=0){
			int x=num&15;
			arr[pos]=chs[x];
			pos++;
			//System.out.println(chs[x]);
			num=num >>> 4;
		}
		for(int i=pos-1; i>=0; i--){
			System.out.print(arr[i]);
		}
		System.out.println();
	}





	//十进制——六进制
	/*
	60在内存中的二进制格式:0000-0000 0000-0000 0000-0000 0011-1100
	将数转二进制后,&5,得到第一个数,然后右移四位,&5,得到第二位数,然后右移四位...循环
	得到的数>9时:=10为A,=11为B,=12为C,=13为D,=14为E,=15为F	
	(可计算负数)
	*/

	public static void toHex(int num){
		StringBuffer bu = new StringBuffer();
		for(int i=0; i<8; i++){
			int temp = num & 15;
			if(temp>9){
				//System.out.println((char)(temp-10+ 'A'));
				bu.append((char)(temp-10+ 'A'));
			}else{
				//System.out.println(temp);
				bu.append(temp);
			}
			num = num >>> 4;
		}
		System.out.println(bu.reverse());
	}
	
	//十进制——十六进制(可计算负数)
	public static void toHex2(int num){
		StringBuffer bu = new StringBuffer();
		for(int i=0; i<8; i++){
			int x=num&15;
			num=num>>>4;
			String res="";
			if(x>9){
				switch(x){
					case 10: 
						res="A";
						break;
					case 11: 
						res="B";
						break;
					case 12: 
						res="C";
						break;
					case 13: 
						res="D";
						break;
					case 14: 
						res="E";
						break;
					case 15: 
						res="F";
						break;
				}
			}else{
				res=""+x;
			}
			bu.append(res);
			
		}
		System.out.println(bu.reverse());
	}

	//十进制——二进制(只适用于正数)
	public static void toBin(int num){
		StringBuffer bu=new StringBuffer();
		while(num>0){
			int x=num%2;
			num=num/2;
			//System.out.println(x);
			bu.append(x);
		}
		System.out.println(bu.reverse());
	}


	//十进制——二进制(可计算负数)
	public static void toBin2(int num){
		//定义一个临时容器
		char[] arr=new char[32];
		//定义角标
		int pos=0;
		char[] chs = {'0','1'};
		while(num!=0){
			int x=num&1;
			arr[pos]=chs[x];
			pos++;
			//System.out.println(chs[x]);
			num=num >>> 1;
		}
		for(int i=pos-1; i>=0; i--){
			System.out.print(arr[i]);
		}
		System.out.println("");
	}


}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值