Topic: 我做的java的 进制转化问题,请大家的宝贵意见。。 |
Print this page |
1.我做的java的 进制转化问题,请大家的宝贵意见。。 | Copy to clipboard |
Posted by: develop8 Posted on: 2006-05-31 08:19 /*这个是 thingking in java 3 Controlling Program Flow 当中的例子: 我不理解他的转化原理是什么?请简单的分析给我好吗? 学了半年多java了,对位操作还是很模糊,实际中不知道什么使用它, 请告诉我怎么能学好位操作符? */ class test22{ public static void main(String []args){ for(int i=-10;i<0;i++){ printBinary(i); printBinary(Math.abs(i)); System.out.println("_____________________"); } } static void printBinary( int i) { System.out.println(" int: " + i + " binary: "); System.out.print(" "); for(int j = 31; j >= 0; j--) if(((1 << j) & i) != 0) System.out.print("1"); else System.out.print("0"); System.out.println(); } } /*我做的方式是用算术的方法转化,但是负数我不会转了, 请大家指点 !! 可能没有前面的程序高明,因为我对移位的操作不太熟悉, 缺乏很多基础的原理,请高手们多讲点这方面的基础知识好吗 位操作在编程当中很少用是吗? */ class convert2{ public static void main(String[]args){ for(int i=0;i<9;i++) m(i); } public static void m(int binary){ int a=binary; int []ax=new int[64]; int i=0; String s=""; String s2="0"; String s3=""; for(;;){ if(a>=2){ ax[i++]=a%2; a=a/2; continue; } ax[i]=a; break; } for(;i>=0;i--) s=s+new Integer(ax[i]).toString(); //System.out.println(binary+"="+s); for(int j=0;j<32-s.length();j++) s3=s3+s2; System.out.println("\tint\t"+binary+" binary:\n"+s3+s); System.out.println("______________________"); } } ————————————————————————— // int 类型转化成 16进制。 // 在我学习了java半年多之后,才有能力解决的基础问题。 // 我是不是很苯? //在命令行里输入 任何一个int型数据,就得到转化的16进制。 import java.util.*; public class convertor{ public static void main(String[]args){ Map m = new HashMap(); m.put(new String("0"),new String("0")); m.put(new String("1"),new String("1")); m.put(new String("2"),new String("2")); m.put(new String("3"),new String("3")); m.put(new String("4"),new String("4")); m.put(new String("5"),new String("5")); m.put(new String("6"),new String("6")); m.put(new String("7"),new String("7")); m.put(new String("8"),new String("8")); m.put(new String("9"),new String("9")); m.put(new String("10"),new String("A")); m.put(new String("11"),new String("B")); m.put(new String("12"),new String("C")); m.put(new String("13"),new String("D")); m.put(new String("14"),new String("E")); m.put(new String("15"),new String("F")); int ax[]=new int[10]; String s=""; int i=0; int a; try{ a=Integer.parseInt(args[0]); for(;;){ if(a>=16){ ax[i++]=a%16; a=a/16; continue; } ax[i]=a; break; } for(;i>=0;i--){ //System.out.println("ax["+i+"]="+ax[i]); s=s+m.get(new Integer(ax[i]).toString()); } System.out.println(args[0]+"="+s); }catch(NumberFormatException e){} } } —————————————————————————————— //输入:0xFFFF ,会转化成自然数。 //0x后面的字符必须要大写的,因为我在声明的时候用的是大写的, //如果你嫌麻烦你就把ABCDEF改成abcdef就可以了,那么你就可以用小写的格式了:比如0xffff. //我做的这种方法可能很笨,不知道用什么办法能更好? import java.util.*; public class decoder{ public static void main(String[]args){ Map m = new HashMap(); m.put(new String("0"),new String("0")); m.put(new String("1"),new String("1")); m.put(new String("2"),new String("2")); m.put(new String("3"),new String("3")); m.put(new String("4"),new String("4")); m.put(new String("5"),new String("5")); m.put(new String("6"),new String("6")); m.put(new String("7"),new String("7")); m.put(new String("8"),new String("8")); m.put(new String("9"),new String("9")); m.put(new String("A"),new String("10")); m.put(new String("B"),new String("11")); m.put(new String("C"),new String("12")); m.put(new String("D"),new String("13")); m.put(new String("E"),new String("14")); m.put(new String("F"),new String("15")); int i=3; String s=args[0]; try{ int a=Integer.parseInt((String)m.get(new Character(s.charAt(2)).toString())); // System.out.println("a="+a); for(;;){ if(i<s.length()){ a=a*16+Integer.parseInt((String)m.get(new Character(s.charAt(i++)).toString())); continue; } break; } System.out.print(args[0]+"="+a); }catch(NumberFormatException e){System.out.println(e);} } } —————————————————— 以上3个程序都是在昨天下午4点多到晚上做的。才会转化数据类型了。 但负数的还不会。(虽然在jdk里有转化进制的方法,但我想自己也必须会这些基础的东西。我知道我做的方法很苯, 大家有更好办法请交我啊?) thingking in java 里说: Note that the high bit represents the sign: 0 means positive and 1 means negative. The output for the int portion looks like this: 这里高位(high bit)指的是哪个?是最左边的那一个位吗? -1, int: -1, binary: 11111111111111111111111111111111 +1, int: 1, binary: 00000000000000000000000000000001 maxpos, int: 2147483647, binary: 01111111111111111111111111111111 maxneg, int: -2147483648, binary: 10000000000000000000000000000000 i, int: 59081716, binary: 00000011100001011000001111110100 ~i, int: -59081717, binary: 11111100011110100111110000001011 最后发表我对java的小见解:象我这样的外行对系统知识这么差的人,都能做出DOS 的 dir 命令了, 可见java的厉害了,即使不知道基础的知识,只要会调用jdk 中的方法就一切都ok了, java是高级语言,隐藏了系统的知识。。有人说要想在IT 里混,基础知识要牢固, 这样才能学好高级语言,不知道大家对这个观点同意吗?要想学好基础知识那么你必须 要学汇编语言吗? |
2.Re:我做的java的 进制转化问题,请大家的宝贵意见。。 [Re: develop8] | Copy to clipboard |
Posted by: lisliefor Posted on: 2006-05-31 12:59 develop8应该算比较勤奋的一个!惭愧...... 我在看thinking in java的时候,在位操作那一块跳过去了,因为发现用到它的地方确实很少吧! 我还迈出去,没资格评论什么,不过,基础确实比较重要!当然,基础并不一定就指汇编,算法、数据结构、操作系统同样重要! 我觉得我们迫切需要明白的是,并不是学这学那,那样很容易朝三暮四,而且浪费时间!而是把握自我,跟着自己的爱好走,踏踏实实。 当你觉得基础已经不错的时候,那么你应该将目光转移到企业应用到底需要我们懂得什么知识!然后,有针对的学习!这样或许能让我们少在彷徨无措中,虚度光阴...... |
3.Re:我做的java的 进制转化问题,请大家的宝贵意见。。 [Re: develop8] | Copy to clipboard |
Posted by: prince1234 Posted on: 2006-05-31 16:26 看了搂主的问题 建议去看下二进制是怎么表示十进制数 对于位的操作汇编用的比较多 而起汇编效率最高的,但是现在用的很少了,写单片机都开始不用了,效率低的缘故 但是简单的看下应该会对你写程序有帮助,就看计算机接口技术就成 不知道对搂主有帮助没有 我也是才开始学java不到两天的人 说的不对,不要介意 搂住的后两个程序我编译不通过。 ^_^ |
4.Re:我做的java的 进制转化问题,请大家的宝贵意见。。 [Re: develop8] | Copy to clipboard |
Posted by: develop8 Posted on: 2006-06-01 07:36 我的程序不可能不通过啊。。你再试试。。你就保留程序的部分, 看看自己的 { 符号是不是都匹配。我在家都试过的,都能通过的 java convertor 100 java decoder 0xFFF |
Powered by Jute Powerful Forum® Version Jute 1.5.6 Ent Copyright © 2002-2021 Cjsdn Team. All Righits Reserved. 闽ICP备05005120号-1 客服电话 18559299278 客服信箱 714923@qq.com 客服QQ 714923 |