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

===二进制运算结束===

原文地址:https://www.cnblogs.com/gynbk/p/9300513.html