develop8
发贴: 129
积分: 0
|
于 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 里混,基础知识要牢固, 这样才能学好高级语言,不知道大家对这个观点同意吗?要想学好基础知识那么你必须 要学汇编语言吗?
scottlai edited on 2006-05-31 09:02
|