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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄长利 中级黑马   /  2012-3-17 21:22  /  2454 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄长利 于 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作运算又会自动提升为整型
针对这种情况应该如何处理?

8 个回复

倒序浏览
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]);
                }
               
        }

}
//学习一下别人的也是一种收获,这个程序是毕老师的,很牛的,呵呵,我超喜欢这个类的思想。。。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
一个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;
复制代码
耐心往后学学就知道了。以后学会了查表法更好用。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
可以这样处理(int)(n1+n2);
回复 使用道具 举报
哥们,你这个奇怪了,我能编译,不能执行。
回复 使用道具 举报
王亚男 发表于 2012-3-17 21:42
一个if判断就搞定了耐心往后学学就知道了。以后学会了查表法更好用。

System.out.println(n1>9?(char)(n1-10+'A'):n1);这句输出的为什么是67,而不是C?
回复 使用道具 举报
王亚男 黑马帝 2012-3-17 23:51:41
7#
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:51
类型强转变成字符型之后,由于与后面n1或者n2作运算又会自动提升为整型

楼主回答了~

请问,他不是用char进行强转了吗?输出的应该是C,为什么不是呢。没有懂你意思。三元运算我知道。
回复 使用道具 举报
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.
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马