zoukankan      html  css  js  c++  java
  • 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

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

  • 相关阅读:
    mysql性能优化
    pymysql模块
    mysql数据表约束
    MySQL数据库
    IO模型
    8451
    8946531
    6783
    256213
    27822
  • 原文地址:https://www.cnblogs.com/gynbk/p/9300513.html
Copyright © 2011-2022 走看看