黑马程序员技术交流社区

标题: 关于获取十进制数的十六进制 [打印本页]

作者: 黄长利    时间: 2012-3-17 21:22
标题: 关于获取十进制数的十六进制
本帖最后由 黄长利 于 2012-3-17 21:28 编辑

class  Weiyunsuan
{
        public static void main(String[] args)
        {
                int num = 60;
               
                int n1 = num & 15;
               
                System.out.println(n1>9?(char)(n1-10+'A'):n1);


               
                int temp = num >>> 4;

               
                int n2 = temp & 15;
                System.out.println(((n2)>9)?((char)(n2-10+'A')): (n2));
               
        }
}
其中类型强转变成字符型之后,由于与后面n1或者n2作运算又会自动提升为整型
针对这种情况应该如何处理?
作者: 李爱军    时间: 2012-3-17 21:40
public class jinzizhuanhuan {

        /**进制之间的转换
         * @param args
         */
        public static void main(String[] args) {
                int num = 60;
                trans(num,15,4);

        }
        /**
         * 进制抽象的函数
         * @param num  要转换的数
         * @param base 要相与的书数 2^offset-1
         * @param offset  要进行转换的进制 如2,8,16
         */
        public static void trans(int num,int base,int offset)
        {
                if(num==0)
                {
                        System.out.println(num);
                        return ;
                }
                char[] table = new char[]{'0','1','2','3','4','5'
                                ,'6','7','8','9','A','B','C','D','E','F'};
                char[] arr = new char[16];
                int pos = arr.length;
                while(num!=0)
                {
                        int tem = num&base;//取得num的二进制的最后的offset位;
                        arr[--pos] = table[tem];//将取得数进行查表存储到数组中,是到这存储的。
                        num = num>>>offset;//无符号右移offset位,为下一次取数作准备;
                }
                //打印转换完的数
                for(int x=pos; x<arr.length;x++)
                {
                        System.out.print(arr[x]);
                }
               
        }

}
//学习一下别人的也是一种收获,这个程序是毕老师的,很牛的,呵呵,我超喜欢这个类的思想。。。
作者: 王亚男    时间: 2012-3-17 21:42
一个if判断就搞定了
  1. int temp = num & 15;
  2.                         if(temp>9)
  3.                                 System.out.println((char)(temp-10+'A'));
  4.                         else
  5.                                 System.out.println(temp);
  6.                                 num = num>>>4;
复制代码
耐心往后学学就知道了。以后学会了查表法更好用。
作者: 刘_浩    时间: 2012-3-17 23:21
可以这样处理(int)(n1+n2);
作者: 刘_浩    时间: 2012-3-17 23:35
哥们,你这个奇怪了,我能编译,不能执行。
作者: 刘_浩    时间: 2012-3-17 23:47
王亚男 发表于 2012-3-17 21:42
一个if判断就搞定了耐心往后学学就知道了。以后学会了查表法更好用。

System.out.println(n1>9?(char)(n1-10+'A'):n1);这句输出的为什么是67,而不是C?

作者: 王亚男    时间: 2012-3-17 23:51
liuhao411 发表于 2012-3-17 23:47
System.out.println(n1>9?(char)(n1-10+'A'):n1);这句输出的为什么是67,而不是C?

类型强转变成字符型之后,由于与后面n1或者n2作运算又会自动提升为整型

楼主回答了~

而且这个三元运算符,一定要有返回值,所以这个硬伤这样没法避免的,所以前期可以用if来弥补。
作者: 刘_浩    时间: 2012-3-17 23:54
王亚男 发表于 2012-3-17 23:51
类型强转变成字符型之后,由于与后面n1或者n2作运算又会自动提升为整型

楼主回答了~

请问,他不是用char进行强转了吗?输出的应该是C,为什么不是呢。没有懂你意思。三元运算我知道。
作者: 张立江    时间: 2012-3-18 10:40
liuhao411 发表于 2012-3-17 23:54
请问,他不是用char进行强转了吗?输出的应该是C,为什么不是呢。没有懂你意思。三元运算我知道。 ...

nt num = 60;
               
                int n1 = num & 15;
               
                System.out.println(n1>9?(char)(n1-10+'A'):n1);

这里(n1-10+'A')确实是用char强制转换了,但是它还需要和n1进行比较,而n1是int类型,int型优先级比char型高,两者在比较的时候,系统会自动将char转换成int,所以最后输出的结果是C的ASCII码67.




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2