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

/**
        New灬狼
        2016年1月5日19:40:30
*/

/*
步骤:
        1,新建ArrayTest07.java
       
*/

class ArrayTest07
{
        //toBinary定义一个功能,完成一个十进制的数转换成二进制的数;
        //思路:
        //十进制转换二进制就是不断的%2,这是一个重复的过程,可以用循环。
        public static void toBin(int num)
        {
                StringBuffer sb=new StringBuffer ();        //这是一个容器
                //while (num>0)        这样写有局限性,不能转换负数。
                while (num!=0)
                {
                        //System.out.println(num%2);
                        sb.append(num%2);
                        //num=num/2;        这样写只能针对正数,对负数就不能用了,>>>1,带符号右移1位,相当于/2;
                        num=num>>>1;
                }
                System.out.println(sb.reverse());        //reverse 反转 注意加()
       
        }
        //decimal To Hex十进制转换为十六进制
        //就是这个数&15,得到一位十六进制末位数
        //然后这个数再带符号右移4位,再&15;
        //因为一个decimal转换为二进制,在内存中是32位,所以右移8次后,就没有了;
        public static void decimalToHex(int number)
        {
                StringBuffer b=new StringBuffer ();
                //这里就直接改了
                for (;number!=0 ; )
                {
                        int temp =number & 15;        //先取末位值
                        if (temp>9)        //因为Hex中大于9就是字母:A,B,C,D,E,F
                        {
                                //System.out.println((char) (temp-10+'A'));
                               
                                b.append((char)(temp-10+'A'));        //注意转换类型的括号
                        }
                        else
                                //System.out.println(temp);
                                b.append(temp);       

                        number =number >>> 4;        //带符号右移4位;
                }
                        System.out.println(b.reverse());        //不加reverse就是正序
        }

        //decimal To Octonary十进制转换为八进制
        //因为八进制最大数就是7,所以decimal&7,就会得出1位八进制;
        //因为1位八进制=3位二进制,所以,这个数需要>>>3;

        //因为decimal在内存中是binary形式,占32位,需要右移11次。        这是错误的想法,因为八进制数可以无限大
        public static void decimalToOctonary(int number)
        {
                StringBuffer o=new StringBuffer();
                //for (int x=0;x<11;x++ )
                for ( ;number!=0; )        //因为这里写x没有用,循环的条件只要这个数不等于0,就应该转
                {
                        int temp=number&7;
                        //System.out.println(temp);
                        o.append(temp);
                        number =number>>>3;
                }
                System.out.println(o.reverse());
        }


//
public static void main(String [] args)
{
        toBin(6);
        toBin(-6);
        decimalToHex(60);
        decimalToHex(-60);
        decimalToOctonary(15);
        decimalToOctonary(-15);        //java是双字节的
       
}


}

1 个回复

倒序浏览
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马