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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 牛头人图腾 中级黑马   /  2014-3-15 00:48  /  1197 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

今天复习到了进制转换,下面是毕老师的十进制转换成十六进制的代码,对于负数好像不成立啊,下面是代码。例:将十进制-15转换成十六进制,所得结果为FFFFFFF1,-15的十六进制不是应该-F吗。还是我理解错了或是把代码搞错了。如果不是,那么可不可以这样实现。先对num进行判断,如果是负数将其先转换成对应的正数~num+1.然后再执行与运算、移位运算,然后输出的时候在数值前面加上符号就可以了。
class Demo3
{
        public static void main(String[] args)
        {
                toHex_2(-15);
        }
        public static void toHex_2(int num)
        {
                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[8];
                int pos = arr.length;

                while(num!=0)
                {
                        int temp = num&15;
                        arr[--pos] = chs[temp];
                        num  = num >>> 4;
                }
               
                for(int x=pos ;x<arr.length; x++)
                {
                        System.out.print(arr[x]);
                }
        }
       
}

评分

参与人数 1技术分 +1 收起 理由
zzkang0206 + 1

查看全部评分

6 个回复

倒序浏览
这些问题大概弄懂了慢慢理解吧,后面后很多包装好的方法呢
你看
十进制转成十六进制:
Integer.toHexString(int i)
十进制转成八进制
Integer.toOctalString(int i)
十进制转成二进制
Integer.toBinaryString(int i)
十六进制转成十进制
Integer.valueOf("FFFF",16).toString()
八进制转成十进制
Integer.valueOf("876",8).toString()
二进制转十进制
Integer.valueOf("0101",2).toString()

有什么方法可以直接将2,8,16进制直接转换为10进制的吗?
java.lang.Integer类
parseInt(String s, int radix)
使用第二个参数指定的基数,将字符串参数解析为有符号的整数。
examples from jdk:
parseInt("0", 10) returns 0
parseInt("473", 10) returns 473
parseInt("-0", 10) returns 0
parseInt("-FF", 16) returns -255
parseInt("1100110", 2) returns 102
parseInt("2147483647", 10) returns 2147483647
parseInt("-2147483648", 10) returns -2147483648
parseInt("2147483648", 10) throws a NumberFormatException
parseInt("99", throws a NumberFormatException
parseInt("Kona", 10) throws a NumberFormatException
parseInt("Kona", 27) returns 411787

进制转换如何写(二,八,十六)不用算法
Integer.toBinaryString
Integer.toOctalString
Integer.toHexString


例二

public class Test{
   public static void main(String args[]){

    int i=100;
    String binStr=Integer.toBinaryString(i);
    String otcStr=Integer.toOctalString(i);
    String hexStr=Integer.toHexString(i);
    System.out.println(binStr);

}



例二
public class TestStringFormat {
   public static void main(String[] args) {
    if (args.length == 0) {
       System.out.println("usage: java TestStringFormat <a number>");
       System.exit(0);
    }

    Integer factor = Integer.valueOf(args[0]);

    String s;

    s = String.format("%d", factor);
    System.out.println(s);
    s = String.format("%x", factor);
    System.out.println(s);
    s = String.format("%o", factor);
    System.out.println(s);
   }
}



其他方法:

Integer.toHexString(你的10进制数);
例如
String temp = Integer.toHexString(75);
输出temp就为 4b



//输入一个10进制数字并把它转换成16进制
import java.io.*;
public class toHex{

public static void main(String[]args){

int input;//存放输入数据
//创建输入字符串的实例
BufferedReader strin=new BufferedReader(new InputStreamReader(System.in));
System.out.println("请输入一个的整数:");
String x=null;
try{
x=strin.readLine();
}catch(IOException ex){
ex.printStackTrace();
}
input=Integer.parseInt(x);
System.out.println ("你输入的数字是:"+input);//输出从键盘接收到的数字

System.out.println ("它的16进制是:"+Integer.toHexString(input));//用toHexString把10进制转换成16进制
}
}

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
java基础还真不太好理解,一起加油吧
回复 使用道具 举报
                              15的二进制是   00000000 00000000 00000000 00001111
       -15就是上面的数取反加1,就是  11111111 11111111 11111111 11110001
然后每4位表示成一个16进制数,就是   FFFFFFF1

楼主之前的代码是没错的,-15的16进制表示就是FFFFFFF1,不是-F;
看代码的运算过程,也是将上面-15的二进制表示的每4位换算成一个对应的16进制数的,代码没问题。

评分

参与人数 1技术分 +1 收起 理由
何伟超 + 1

查看全部评分

回复 使用道具 举报
fenzheng 发表于 2014-3-15 09:05
这些问题大概弄懂了慢慢理解吧,后面后很多包装好的方法呢
你看
十进制转成十六进制:

嗯。后面已经写好了方法,只是刚好遇到这些问题。
回复 使用道具 举报
fenzheng 发表于 2014-3-15 09:09
java基础还真不太好理解,一起加油吧

是啊。而且有时候越是琢磨越是不懂。加油
回复 使用道具 举报
chen_x 发表于 2014-3-15 10:19
15的二进制是   00000000 00000000 00000000 00001111
       -15就是上面 ...

嗯。谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马