A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵学刚 中级黑马   /  2012-11-26 15:31  /  1139 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵学刚 于 2012-12-3 11:22 编辑

/*十六转二进制
* 思路:
* 1、让数据跟15做与运算,取到数据低四位然后转换成16进制
*
* 2、让运算 后的数据无符号右移4位再次跟15做与运算,如此
* 循环直到32为数据都结束
* 3、通过查表法转换,然后去除空格即可
*
*/

public class test5 {
        
        public static void toHex(int num){
                char[] arr=new char[]{'0','1','2','3','4','5','6','7','8','9'
                        ,'A','B','C','D','E','F'};
                char []ch=new char[8];
                int pos=ch.length-1;
                 while(num!=0){
                         int temp=num&15;
                         ch[pos--] = arr[temp];
                         num=num>>>4;
                        
                        
                 }
                  //打印
                 
                 for(int i=pos;i<ch.length;i++){
                         System.out.print(ch+',');
                 }     
               
                        
               
        }
        

        public static void main(String[] args) {

                toHex(60);
        }

}


为什么输出结果不对呢?

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

3 个回复

倒序浏览
class  ArrayTest
{
public static void main(String[] args)
{
// toHex(0);
toBinary(-6);
System.out.println(Integer.toBinaryString(-6));
// toOctal(60);
}
/*
十进制-->十六进制。
*/
public static void toHex(int num)
{
trans(num,15,4);
}
/*
十进制-->八进制。
*/
public static void toOctal(int num)
{
trans(num,7,3);
}
/*
十进制-->二进制。
*/
public static void toBinary(int num)
{
trans(num,1,1);
}
/*
进制转换功能。
*/
public static void trans(int num,int base,int offset)
{
if(num==0)
{
System.out.println("0");
return ;
}
//必须先将十六进制的元素进行存储。
char[] chs = {'0','1','2','3'
,'4','5','6','7'
,'8','9','A','B'
,'C','D','E','F'};
//定义一个临时容器,用于存储查到的结果。
char[] arr = new char[32];
int pos = arr.length;
while(num!=0)
{
int temp = num & base;
// System.out.print(chs[temp]);
arr[--pos] = chs[temp];
num = num >>> offset;
}
// System.out.println("pos="+pos);
for(int x=pos; x<arr.length; x++)
{
System.out.print(arr[x]);
}
System.out.println();
}
}
楼主的代码错了

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
public class Test5 {      
         public static void toHex(int num)
                         {
                 char[] arr={'0','1','2','3','4','5','6','7','8','9'
                         ,'A','B','C','D','E','F'};//这里没有必要new一个新的数组
                 char []ch=new char[8];//定义一个容器用来存放转化后的数据
                 int pos=0;//容器角标,pos值应该是给定数的二进制形式除以4而不是length-1,这样太麻烦还不如初始化一个0,输出的时候反过来就可以了
                  while(num!=0)
                                          {
                          int temp = num & 15;
                          ch[pos++] = arr[temp];
                          num = num>>>4;                                                   
                                           }
                   //打印
                  
                  for(int x=pos-1;x>=0;x--)
                                  {
                          System.out.print(ch[x]);//输出的数据是存放在容器ch数组中的,而不是你定义的arr表中
                  }                                                         
         }         
         public static void main(String[] args)
                {
                 toHex(60);
        }

}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
问题自己解决了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马