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

来源:互联网 发布:电影源码带采集 编辑:程序博客网 时间:2024/05/21 18:49
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等数字,我们需要将他转化成ABCDEFfor (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 0
原创粉丝点击