您的位置:首页 > 职场人生

黑马程序员_Java基础[6]_进制转换

2014-04-28 23:53 288 查看
----------
android培训 、java培训
、期待与您交流! ----------

主要记录进制之间的转换,至于其他转换日后详细学习。

其中,涉及到:

StringBuffer 类

     append();追加?在c#中该方法是追加字符串用的,
      reverse();反转

二进制

    60的二进制:

    0000-0000  0000-0000  0000-0000  0011-1100

& 0000-0000  0000-0000  0000-0000  0000-1111=15    (注意&  )(注意只计算4位)(4个1最大,就是15=1+2+4+8)

-----------------------------------------------

  0000-0000  0000-0000  0000-0000  0000-1100=12=c         (0是假,1是真,真真得真。)

              0000-0000  0000-0000  0000-0000  0011-1100   无符号右移(>>>)4位

& 0000-0000  0000-0000  0000-0000  0000-1111=15    (注意&  )(注意只计算4位)

-----------------------------------------------

  0000-0000  0000-0000  0000-0000  0000-0011=3

  得出等于3c =60  2进制最多有8个4组,所以最多循环 无符号右移 8次。

自定义     查表法

 0 1 2 3 4 5 6 7 8 9  A  B  C  D  E  F   十六进制

 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15   可以把这一行看成上一行的下标。数组的方式

/**

 * 用代码的方式进行进制之间的转换

 */

package ChongWuSystem;

public class Zhuanhuan {

    

    public static void main(String [] args){

        

        int a=-6 ;

        //toBin(a);

        toHex(a);

        toBiao(a);

        toBiao2(a);

        toBinC(a);

        /*试试把a定义为负数,试试。会发现,十进制转二进制报错,其他转换都没问题。

            再看看十转二,再看看其他转换。得出其他方式正负值都能转换。

           然后我们在把十进二改为查表法试试toBinC();

         现在注释掉toBin(a);保留toBinC(a);

        */

        

        

    }

    //十进制转二进制

    public static void toBin(int num){

        StringBuffer sb=new StringBuffer();

        while(num>0){

            //System.out.println(a%2);

            sb.append(num%2);

            //用一个StringBuffer对象方法append()接收连接字符。

            num=num/2;

        }

        System.out.print(sb+"\t得出的字符串\n");//打印字符串

        System.out.print(sb.reverse()+" 正确的二进制\n");//反转打印字符串 就是我们想要的了。

    }

    

    /*十进制转换十六进制

     * 回顾一下二进制转16进制,用2进制&上15就是1111,(&真真真,0假1真)

     * 得出右边第一个四位数的结果,把结果进行比较,大于9则用abc表示,

     * 然后把二进制无符号右移4位,&15 一直循环到该2进制结束。

     *

     * (char)(temp-10+'A')这个比较麻烦

     */

    public static void toHex(int num){

        StringBuffer sb=new StringBuffer();

        

        for(int i=0;i<8;i++){

            int temp=num&15;

            if(temp>9){

                //System.out.print((char)(temp-10+'A'));

                sb.append((char)(temp-10+'A'));

            }else{

                //System.out.print(temp);

                sb.append(temp);

            }

            

            num=num>>>4;

        }

        System.out.println(sb+"  得出的字符串");

        System.out.println(sb.reverse()+" 正确的十六进制");

        /*

         * 先打印出结果,后使用StringBuffer对象实现字符串的连接并反转打印得出正确答案。

         */

        

    }

    /*

     * 用更简单的办法来解决十六进制的转换用一个数组制作一个表,根据小标得出结果

     *

     */

    public static void toBiao(int num){

        char [] biao={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

        char [] cha =new char[8];

        int pos=0;

        while(num!=0){//可以直观的看到用for会指定循环8次,而while只要不是0就停止。前面多余0的就不会再显示。

        //for(int i=0;i<8;i++)

            int temp=num&15;            

            //System.out.print(biao[temp]);

            //cha[pos]=biao[temp];//存贮 【a】

            //pos++;                    【b】

            cha[pos++]=biao[temp];//【a+b优化一下】

            num=num>>>4;    

        }

        //储存完毕。

        //打印数组        

        //for(int i=cha.length-1;i>=0;i--){//为了去掉多余的空位,我们把这句改成下一句看看效果:

        //for(int i=pos-1;i>=0;i--){

        for(int i=0;i<cha.length;i++){

            System.out.print(cha[i]+",");

        }

        System.out.println(" 正确的十六进制");

    }

    /*

     * 在toBiao函数中,存入的数据是倒着的,打印的时候必须返回来打印,这里我们存入的时候就顺存入,打印的时候就顺着打

     * 1是定义pos为正确的值,2是用依次减1的方式来倒着插入顺着的数组。3打印出pos对应的值,跟4比较(用画图方式比)后,我们发现不对,

     * 所以注销掉1,改为5,再注销掉2,改为6,这个时候在看3,和4,就一致了。

     */

    public static void toBiao2(int num){

        char [] biao={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

        char [] cha =new char[8];

        //int pos=cha.length-1;//【顺着存入数组的关键1】【1】

        int pos=cha.length;//【5】

        while(num!=0){//可以直观的看到用for会指定循环8次,而while只要不是0就停止。前面多余0的就不会再显示。

            int temp=num&15;            

            //cha[pos--]=biao[temp];//【顺着存入数组的关键2】【2】

            cha[--pos]=biao[temp];//【6】这个时候是7就是第八个的下标,就是倒着插入的最右边的那个元素

            num=num>>>4;    

        }

        System.out.println("pos"+pos);//【3】

        //打印数组    为了去掉前面的空    

        for(int i=0;i<cha.length;i++){

            System.out.print(cha[i]+",");

        }

        System.out.print("正确的十六进制\n");

        for(int i=pos;i<cha.length;i++){//【4】

            System.out.print(cha[i]+",");

        }

        System.out.print("\t最正确的十六进制最后去掉("+"“,”"+")即可");

    }

    

    /*

     * 查表法-十进二

     */

    public static void toBinC(int num){

        

        char [] cha={'0','1'};

        char [] arr=new char[32];

        int pos=arr.length;

        while(num!=0){

            int temp=num&1;

            arr[--pos]=cha[temp];

            num=num&
4000
gt;>>1;

        }

        System.out.println("\npos"+pos);

        for(int i=pos;i<arr.length;i++){

            System.out.print(arr[i]);

        }

        System.out.print("正确的");

    }

    

    

    //

    

}

----------
android培训、 java培训
、期待与您交流!----------

黑马官网: http://edu.csdn.net/heima
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: