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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张龙跃 中级黑马   /  2013-4-25 21:05  /  1921 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张龙跃 于 2013-4-25 23:59 编辑

十进制转二进制的代码我能看懂
class haha
{
        public static void main(String [] args)
        {
                toBin(6);
        }
        public static void toBin(int num)
        {
                StringBuffer sb = new StringBuffer();
                while (num > 0)
                {
                        sb.append (num%2);
                        num = num / 2;
                }
                System.out.println(sb.reverse ());
        }
}

但十进制转十六进制的看不懂啊
class ArrayTest5
{
        public static void main(String[] args)
        {
               
                toHex(60);
        }
               
        public static void toHex(int num)
        {

                StringBuffer sb = new StringBuffer();

                for(int x=0; x<8; x++)
                {
                        int temp = num & 15;
                        if(temp>9)
                                sb.append((char)(temp-10+'A'));
                        else

                                sb.append(temp);

                        num  = num >>> 4;
                }
                System.out.println(sb.reverse());

        }
}

我对进制转换很迷糊,看了好几遍都搞不太清楚,我想问下,进制转换对以后影响大不大啊,大家是怎么搞的?


评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

5 个回复

倒序浏览
刚开始学的时候,努力理解以下,学到后边调用方法就能实现进制转换,不用自己去做.但是既然是做这行的,即使用不到,多懂一点,至少显得专业,不是吗.或者说,出去做程序员,基本的问题不懂, 显得有点小白.对吧
回复 使用道具 举报
for(int x=0; x<8; x++)
                {
                        int temp = num & 15;
                        if(temp>9)
                                sb.append((char)(temp-10+'A'));
                        else

                                sb.append(temp);

                        num  = num >>> 4;
                }

这是对十进制数进行十六进制的转换,int temp = num & 15;是对num的二进制数与15想与,变成十六进制数。


如果回答的不对,还请各位不要见笑。

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
class ArrayTest5
{
         public static void main(String[] args)
        {
                 
                toHex(60);
         }
                 
        public static void toHex(int num)
         {

                StringBuffer sb = new StringBuffer();

                for(int x=0; x<8; x++)
                 {
                         int temp = num & 15;//因为为了获取后四位,要&1111,换成十进制也就是15
                         if(temp>9)
                                 sb.append((char)(temp-10+'A'));//这一步是:当求出的十六进制大于9时,把它转换为”字符“
                         else

                                sb.append(temp);

                        num  = num >>> 4;//这是右移四位为了获取这个数的下个后四位
                 }
                 System.out.println(sb.reverse());

        }
}

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
注释如下  希望你能明白
class ArrayTest5
{
        public static void main(String[] args)
        {
               
                toHex(60);
        }
               
        public static void toHex(int num)
        {

                StringBuffer sb = new StringBuffer();//构造一个字符缓冲区,这个你应该明白吧

                for(int x=0; x<8; x++)//循环8次是因为一个int型数占32位,每次把4位转换成一个16进制数,一共需要8次转换完。
                {
                        int temp = num & 15;//15的二进制数是1111,num与1111是为了将num的二进制的最低四位提取出来存入temp中。至于用15相与是因为16进制需要4位来表示。
                        if(temp>9)//如果temp大于9,则这个数最小是10最大是15,需要用(A-F)来表示。
                                sb.append((char)(temp-10+'A'));   //若为10,则为(0+A=A)正好用A表示,11多的话(11-10=1  1-A=B)正好用B来表示。以此类推。。。。
                        else

                                sb.append(temp);//1--9的数还用1--9表示。这样便得到了num的二进制的低四位的16进制了,将temp的值放入sb中

                        num  = num >>> 4;//然后将num的二进制向右移四位,将已经转换为16进制的低四位移出去。
                }//循环完后,便将所有的位数都转换成了16进制

                System.out.println(sb.reverse());//由于装入的顺序是由低位到高位的顺序,所以打印的时候要反转过来。。。

        }
}
希望我的注释你能够懂。。。。。





点评

建议将代码插入到代码框中,谢谢  发表于 2013-4-25 23:06

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
楼上的注释好全啊,功底比较深,鼓励一下 {:soso_e179:}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马