0
点赞
收藏
分享

微信扫一扫

二进制相加算法

本文主要写二进制相加

(<font color = 'gray'>二进制相加</font>)

二进制相加

二进制相加是一种特殊的加法运算,它只适用于二进制数。在计算机科学中,二进制相加被广泛应用于位运算、逻辑运算和数据存储等方面。 以下是二进制相加的一些作用:

  1. 位运算:二进制相加是位运算中的一种基本运算,它可以用于对二进制数进行位移、掩码操作等。例如,将一个数的各位向左移动一位,可以使用该数与2^n(其中n为向左移动的位数)进行按位异或运算。
  2. 逻辑运算:二进制相加还可以用于逻辑运算中。例如,当两个二进制数相同时,它们的和为0;当两个二进制数不同时,它们的和为1。因此,可以将二进制相加用于判断两个二进制数是否相同。
  3. 数据存储:在计算机中,二进制数据通常以二进制串的形式存储。二进制相加可以用于计算二进制串中的数值,从而实现对数据的读取和处理。

二进制相加的运算原理就是将俩个二进制数相加,得到一个新的二进制数。 俩个二进制数相加有四种情况:

  1. <font color="green">俩个数都为0 即 0+0 =0; </font>
  2. <font color="green">俩个数都为1 即 1+1 = 10;逢二进一
  3. <font color="green">俩个数一个为0一个为1 即0+1 =0 或 1+0 = 1;</font> 熟悉了原理就按照这个逻辑来写代码就可以了。 话不多说上代码
	/**
     * 二进制相加
     * @Author @zzh
     * @Description //TODO
     * @Date 10:16 2023/5/4
     * @param b1
     * @param b2
     * @return java.lang.String
     **/
    public static String add(String b1, String b2) {
        int len1 = b1.length();
        int len2 = b2.length();
        String s1 = b1;
        String s2 = b2;
        StringBuffer sb1 = new StringBuffer();
        //先将位数较少的二进制高位补零
        if (len1 > len2) {
            for (int i = 0; i < (len1 - len2); i++) {
                sb1.append(0);
            }
            sb1.append(b2);
            s1 = b1;
            s2 = sb1.toString();
        } else if (len1 < len2) {
            for (int j = 0; j < (len2 - len1); j++) {
                sb1.append(0);
            }
            sb1.append(b1);
            s1 = sb1.toString();
            s2 = b2;
        }
        //进位
        int flag = 0;
        StringBuffer sb2 = new StringBuffer();
        for (int z = s1.length() - 1; z >= 0; z--) {
            //字符’0’的对应的ASCII十进制是48
            //分情况判断
            if ((s1.charAt(z) - 48) == 0 && (s2.charAt(z) - 48) == 0) {
                sb2.append(flag);
                flag = 0;
                continue;
            }
            if (((s1.charAt(z) - 48) == 0 && (s2.charAt(z) - 48) == 1 && flag == 0) || ((s1.charAt(z) - 48) == 1
                    && (s2.charAt(z) - 48) == 0 && flag == 0)) {
                sb2.append(1);
                flag = 0;
                continue;
            }
            if (((s1.charAt(z) - 48) == 0 && (s2.charAt(z) - 48) == 1 && flag == 1) || ((s1.charAt(z) - 48) == 1
                    && (s2.charAt(z) - 48) == 0 && flag == 1)) {
                sb2.append(0);
                flag = 1;
                continue;
            }
            if ((s1.charAt(z) - 48) == 1 && (s2.charAt(z) - 48) == 1 && flag == 0) {
                sb2.append(0);
                flag = 1;
                continue;
            }
            if ((s1.charAt(z) - 48) == 1 && (s2.charAt(z) - 48) == 1 && flag == 1) {
                sb2.append(1);
                flag = 1;
            }
        }
        if (flag == 1) {
            sb2.append(flag);
        }
        //倒置
        sb2.reverse();
        return sb2.toString();
    }



	/**
     * 二进制相加(测试结果精确度)
     * @Author @zzh
     * @Description //TODO
     * @Date 14:23 2023/5/4
     * @param a
     * @param b
     * @return java.lang.String
     **/
    public static String addBinary(String a, String b) {
        int carry = 0; // 保存进位
        int sum = 0; // 存储进位与两个位之间的和
        int opa = 0;
        int opb = 0;
        StringBuilder res = new StringBuilder();
        //将两个二进制数位补齐,在短的前面添0
        while (a.length() != b.length()) {
            if (a.length() > b.length()) {
                b = "0" + b;
            } else {
                a = "0" + a;
            }
        }
        //从后往前做加法
        for (int i = a.length() - 1; i >= 0; i--) {
            // String a 中的字符的ASCII码值与‘0’字符的差值
            opa = a.charAt(i) - '0';
            // String b 中的字符的ASCII码值与‘0’字符的差值
            opb = b.charAt(i) - '0';
            sum = opa + opb + carry;
            if (sum >= 2) {
                carry = 1;
                res.append((sum - 2));
            } else {
                carry = 0;
                res.append(sum);
            }
        }
        if (carry == 1) {
            res.append("1");
        }
        return res.reverse().toString();
    }
    
举报

相关推荐

二进制算法题

二进制

十进制转二进制算法_python

玩转二进制

# 二进制+Html

Java 二进制

二进制文件

0 条评论