好的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
- 好的JAVA思路——利用补码运算和位运算的巧用来实现进制转化
- 黑马程序员——Java基础语法:利用位运算实现的基础进制转换
- java的移位运算和位运算
- c和java中的位运算对比---补码运算
- 利用位运算实现两个整数的加法运算
- VC++ 利用位运算实现两个整数的加法运算
- 利用位运算实现两个整数的加法运算
- 补码和位运算(初学)
- 补码,反码和位运算
- 位运算: 与”&、“非”~、“或||”、“异或”^ ;原码 反码 补码的相互转化
- 4-9-源码反码补码、进制转化、寄存器变量、动态库dll、位运算加减
- C语言基础(八)- 进制转化、计算机补码、位运算符
- 补码——为cpu运算产生的补码
- 运算的位实现
- 进制和位运算的基本知识:
- Java的位运算
- Java的位运算
- Java的位运算
- HDU 1026 Ignatius and the Princess I 记录 路径广搜
- jquery中form中使用submit出现的问题,未解决
- LeetCode OJ算法题(五十一):N Queens II
- HDU 4927 Series 1(推理+大数)
- 百度地图开发
- 好的JAVA思路——利用补码运算和位运算的巧用来实现进制转化
- 北大oj--2578
- 用vlc搭建简单流媒体服务器(UDP和TCP方式)
- 利用C# 保存图片
- 【IOS 开发】Object-C 入门 Xcode 环境详解
- c++-static关键字
- 有关换工作
- Windows下解决CVS的can't create temporary directory问题
- 矩阵十题【三】 HDU 1588 Gauss Fibonacci