好的JAVA思路——利用补码运算和位运算的巧用来实现进制转化

class RadixChange //进制转换:Radix:进制(医用,计算机的叫法不会 = =||)
{
	<span style="background-color: rgb(255, 255, 0);">/*
		在转换进制前必须要了解进制转换几个特别重要的地方
		1.进制转化的功能在系统中已经封装好了 ,我们这次主要是练习方法和思路
		2.注意 位运算 !注意计算机中所有数字都是以补码的形式出现,注意&运算的妙用!
		3.先一步步来把,先开始把一个十进制数字转化成十六进制。
		4.我们首先想到,二进制,四个一组!可以用位运算将四位提取出来!
			我给这个方法取名:toBinary()
	*/</span>
	<span style="background-color: rgb(51, 255, 51);">/*以下是原来带有注释的版本
	public static void main(String[] args){
		int decimal=60;//decimal:十进制
		toHexadecimal(decimal);//转化成16进制
		toOctonary(decimal);//转化成8进制
		toBinary(decimal);//转化成8进制
	}
	public static void toHexadecimal(int num){
		//我怎么判断他对应的进制数有几位呢?
		//我可以用不停>>的方法,看看经过多少次到2,就是有多少位!
		int count=knowCount(num,16);
		//这是我就可以进行count次>>运算,将每个4位二进制的数字提取出来!并把它放到数组里!
		int []arrNum=new int[count];
		for(int i=0;i<count;i++){
			arrNum[count-1-i]=num&15;//使用倒着存放,避免了又要将数组反转的麻烦。嘿嘿
			num=num>>4;
		}
		System.out.println(turnString(arrNum));



	}

	public static void toOctonary(int num){//转化成8进制,跟16进制的方法一样
		int count=knowCount(num,8);
		int []arrNum=new int[count];
		for(int i=0;i<count;i++){
			arrNum[count-1-i]=num&7;
			num=num>>3;
		}
		System.out.println(turnString(arrNum));
	}

	public static void toBinary(int num){//转化为2进制,跟16进制的方法一样
		int count=knowCount(num,2);
		int []arrNum=new int[count];
		for(int i=0;i<count;i++){
			arrNum[count-1-i]=num&1;
			num=num>>1;
		}
		System.out.println(turnString(arrNum));
	}



	public static int knowCount(int num,int radix){
		//通过位运算的方法判断这个数字能拆成多少个4位二进制
		int count=0;
			for (;num!=0; count++){//count 就是位数
			if (radix==16){
				num=num>>4;
			}else if (radix==8){
				num=num>>3;
			}else if (radix==2){
				num=num>>1;
			}
		
		}
		return count;
	
	}
	
	public static String turnString(int []chars){//使用之前写的转化成字符串的方法
		String str="";
//但是在这里我们发现,16进制会传进来10 11 12 13 14 15等数字,我们需要将他转化成ABCDEF
		for (int i=0;i<chars.length ;i++ ){
			char []charsNew=new char[chars.length];
		//开始写Repalce,替换方法。
			charsNew[i]=replace(chars[i]);
			str=str+charsNew[i]+" ";
		}	
		return str;
	}

	public static char replace(int index){
		char [] chars=new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
		return chars[index];
	}</span>
	<span style="background-color: rgb(255, 0, 0);">*********以下是精简注释的高级版本**************/</span>
	<span style="color:#FF0000;">public static void main(String[] args){
		int decimal=60;//decimal:十进制
		Bridge(60,2);
	}
	
	//建立 桥方法 用来智能分配需要的方法,整合toHexadecimal,toOctonary,toBinary方法
	public static void Bridge(int num,int radix){
		if (radix==16){
				toTurn(num,16,15,4);
			}else if (radix==8){
				toTurn(num,8,7,3);
			}else if (radix==2){
				toTurn(num,2,1,1);
			}
	}

	//转化方法
	public static void toTurn(int num,int radix,int Yu,int goBit){
		int count=knowCount(num,radix);
		int []arrNum=new int[count];
		for(int i=0;i<count;i++){
			arrNum[count-1-i]=num&Yu;//倒序存放数组,避免之后反转
			num=num>>goBit;
		}
		System.out.println(turnString(arrNum));
	}

	//通过位运算的方法判断这个数字能拆成多少个4位二进制
	public static int knowCount(int num,int radix){
		int count=0;
			for (;num!=0; count++){//count 就是位数
			if (radix==16){
				num=num>>4;
			}else if (radix==8){
				num=num>>3;
			}else if (radix==2){
				num=num>>1;
			}
		}
		return count;
	}
	//转化成字符串的方法
	public static String turnString(int []chars){
		String str="";
		for (int i=0;i<chars.length ;i++ ){
			char []charsNew=new char[chars.length];
		
			charsNew[i]=replace(chars[i]);
			str=str+charsNew[i];
		}	
		return str;
	}

	//“替换”方法。
	public static char replace(int index){
		char [] chars=new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
		return chars[index];
	}

}</span>

老师给的思路:



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值