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