java實現二進制的加法


先看打印結果在看代碼比較好理解。結果在最下面的位置。

總結:講解了二進制的按位異域、按位與、左移的運算規則。並通過次3種算法得到2個數相加的結果。二進制應該還有其他算法,由於知識淺薄就不知道了。

 

代碼:

 public static void main(String[] args){
        int a=11,b=9;//初始化要執行加法的值
        System.out.println("===開始二進制運算===");
       add(a,b);
        System.out.println("===二進制運算結束===");

    }


    /**
     * 將二進制的數據打印出來
     * @param binars 需要打印的二進制值
     * @param paramName 需要打印的參數名稱
     * @return 返回打印的字符串
     */
    public  static String printBnary(StringBuilder binars,int param){
        StringBuilder binarsRe=new StringBuilder();
        String[] strs=binars.toString().split(",");
        int strLength=strs.length;
        while (strLength>=1){

            binarsRe.append(strs[strLength-1]+" ");
            strLength--;
        }
        return binarsRe.toString();
    }

    /**
     * 十進制轉換為二進制輸出
     * @param a 要轉換的十進制數
     * @param binars 接收轉換后的二進制數據
     * @param paramName 需要打印的參數名稱
     * @return
     */
    public static  String DecimalTransBinary(int a,StringBuilder binars,int param){
        int rem=a%2;//取余數
        int base=a/2;//取基數
        /**
         * 物流是余數和基數都必須除盡為0
         */
        if(base>0 || rem>0){
            //將所有的余數都添加到字符串中使用,隔開在打印是使用
           binars.append(rem+",");
            DecimalTransBinary(base,binars,param);
         }
            //十進制轉換二進制成功后,將二進制數據打印出來
            return printBnary(binars,param);


    }

    /**
     * 十進制加法,解釋如何使用二進制實現的
     * @param a 執行加法的參數
     * @param b 執行加法的參數
     * @return 返回加法成功后的整數
     */
    public static  int add(int a,int b){

        //對需要相加的數據輸出為二進制
        StringBuilder binars=new StringBuilder();
        String aStr=DecimalTransBinary(a,binars,a);

        //將stringBuilder數據輸出到控制台
        binars.setLength(0);
        String bStr=DecimalTransBinary(b,binars,b);

        int res=a;
        //按為異域的二進制運算
        int xor=a^b;
        System.out.println("");
        System.out.println("按位異域(^):二進制數據的相同位不同則為1,相同則為0。");
        System.out.println(a+"的二進制值:"+aStr);
        System.out.println(b+"的二進制值:"+bStr);
        System.out.println("參數:"+a+" 參數:"+b+"  進行"+a+"^"+b+":");
        binars.setLength(0);
        String xorStr=DecimalTransBinary(xor,binars,xor);
        System.out.println(aStr+"^"+bStr+"="+xorStr);
        System.out.println("按位異域后得到的二進制值:"+xorStr);
        System.out.println("按位異域后得到的十進制值:"+xor);
        //按位與的二進制運算和左移一位的值
        int forward=(a&b)<<1;
        System.out.println();
        System.out.println("按位與(&):二進制數據的相同位都為1則為1,若有一個不為1則為0。");
        System.out.println("左移(<<):二進制數據左移b為(在后面添加b個0)。例如:11<<1。11的二進制為1011,左移1為就是10110;");
        System.out.println("10110轉換為十進制就是:22。左移用十進制解釋就是,11乘以2的1次方的結果。11<<2就是11乘以2的次方的結果。");
        System.out.println("參數:"+a+" 參數:"+b+"  進行("+a+"&"+b+")<<1:");
        binars.setLength(0);
        String forwardStr=DecimalTransBinary(forward,binars,forward);
        System.out.println("("+aStr+"&"+bStr+")<<1="+forwardStr);
        System.out.println("按位與后得到的二進制值:"+forwardStr);
        System.out.println("按位與后得到的十進制值:"+forward);
        System.out.println();
        if(forward!=0){
            System.out.print("("+a+"&"+b+")<<1="+forward+"運算結果不為0,");
            System.out.println("將"+a+"^"+b+"運算的結果值:"+xor+";("+a+"&"+b+")<<1運算的結果值:"+forward+"。繼續重復以上運算。");
             res=add(xor,forward);
        }else{
            System.out.println("("+a+"&"+b+")<<1="+forward+"運算結果為0;"+a+"^"+b+"按位異域的運算結果就是最終的和:"+xor);
            res=xor;
        }

        return  res;
    }

  

結果:

===開始二進制運算===

 

按位異域(^):二進制數據的相同位不同則為1,相同則為0

11的二進制值:1 0 1 1

9的二進制值:1 0 0 1

參數:11 參數:9  進行11^9:

1 0 1 1 ^1 0 0 1 =1 0

按位異域后得到的二進制值:1 0

按位異域后得到的十進制值:2

 

按位與(&):二進制數據的相同位都為1則為1,若有一個不為1則為0

左移(<<):二進制數據左移b為(在后面添加b0)。例如:11<<111的二進制為1011,左移1為就是10110

10110轉換為十進制就是:22。左移用十進制解釋就是,11乘以21次方的結果。11<<2就是11乘以2的次方的結果。

參數:11 參數:9  進行(11&9<<1:

(1 0 1 1 &1 0 0 1 )<<1=1 0 0 1 0

按位與后得到的二進制值:1 0 0 1 0

按位與后得到的十進制值:18

 

11&9<<1=18運算結果不為0,將11^9運算的結果值:2;11&9<<1運算的結果值:18。繼續重復以上運算。

 

按位異域(^):二進制數據的相同位不同則為1,相同則為0

2的二進制值:1 0

18的二進制值:1 0 0 1 0

參數:2 參數:18  進行2^18:

1 0 ^1 0 0 1 0 =1 0 0 0 0

按位異域后得到的二進制值:1 0 0 0 0

按位異域后得到的十進制值:16

 

按位與(&):二進制數據的相同位都為1則為1,若有一個不為1則為0

左移(<<):二進制數據左移b為(在后面添加b0)。例如:11<<111的二進制為1011,左移1為就是10110

10110轉換為十進制就是:22。左移用十進制解釋就是,11乘以21次方的結果。11<<2就是11乘以2的次方的結果。

參數:2 參數:18  進行(2&18<<1:

(1 0 &1 0 0 1 0 )<<1=1 0 0

按位與后得到的二進制值:1 0 0

按位與后得到的十進制值:4

 

2&18<<1=4運算結果不為0,將2^18運算的結果值:16;2&18<<1運算的結果值:4。繼續重復以上運算。

 

按位異域(^):二進制數據的相同位不同則為1,相同則為0

16的二進制值:1 0 0 0 0

4的二進制值:1 0 0

參數:16 參數:4  進行16^4:

1 0 0 0 0 ^1 0 0 =1 0 1 0 0

按位異域后得到的二進制值:1 0 1 0 0

按位異域后得到的十進制值:20

 

按位與(&):二進制數據的相同位都為1則為1,若有一個不為1則為0

左移(<<):二進制數據左移b為(在后面添加b0)。例如:11<<111的二進制為1011,左移1為就是10110

10110轉換為十進制就是:22。左移用十進制解釋就是,11乘以21次方的結果。11<<2就是11乘以2的次方的結果。

參數:16 參數:4  進行(16&4<<1:

(1 0 0 0 0 &1 0 0 )<<1=

按位與后得到的二進制值:

按位與后得到的十進制值:0

 

16&4<<1=0運算結果為016^4按位異域的運算結果就是最終的和:20

===二進制運算結束===


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM