**思路:用计算机模拟人类的进位计算
第一步:让遍历字符串的顺序和二进制取值计算的顺序一致,所以逆序遍历字符串
第二步:取出对应位上的值进行计算 number1 + number2 + sign(前一个是否进位)
第三步:判断第二步的计算是否要进位,因为这是二进制最大为1 当值 >= 2时说明此时发生了进位,sign + 1,在和在对2取余,如果number1,2,sign都为3此时这个位应该为1 .(3% 2 = 1)
第四步:最后判断在计算时最后是否发生进位,看sign进位标志是否> 1,比1大直接追加进来 **
/**
* FileName: Binary_Dome67_02
* Author: 86186
* Date: 2022/3/11 22:54
* Description: Binary_Dome67_02
* History:
* <author> <time> <version> <desc>
* 作者姓名 修改时间 版本号 描述
*/
package com.cq.Dome;
/**
* 〈一句话功能简述〉<br>
* 〈Binary_Dome67_02〉
*
* @author Hacker
* @create 2022/3/11
* @since 1.0.0
*/
public class Binary_Dome67_02 {
public static void main(String[] args) {
String s1 = "101";
String s2 = "100";
int s1Sum;//二进制中的每一位的值
int s2Sum;
int s1Index = s1.length() - 1;
int s2Index = s2.length() - 1;
int i = 0;
int sum;
StringBuffer st = new StringBuffer();//StringBuffer是字符串变量,它的对象是可以扩充和修改的。
int sign = 0;//表示进位
while(s1Index >= 0 || s2Index >= 0){
if(s1Index >= 0){
s1Sum = s1.charAt(s1Index) - '0';//下标从最高的开始让读取的顺序和二进制计算取值的顺序一致
}else{
s1Sum = 0;
}
if(s2Index >= 0){
s2Sum = s2.charAt(s2Index) - '0';
}else{
s2Sum = 0;//说明此时第二个二进制位数不足补零
}
sum = s1Sum + s2Sum + sign;
if(sum >= 2){
sign = 1;//进位标志也要加1
st.append(sum % 2);//append()是向字符数组中追加
//为啥% 2:通过二进制之间的运算是从第一个二进制取一位,第二个二进制位取一位 两者相加还要加进位,开始没有进位是0
}else{
sign = 0;//此时无进位
st.append(sum);
}
s1Index --;
s2Index --;
}
if(sign > 0){//如果循环已经结束即是两个二进制最后一位相加产生进位
st.append(sign);
}
System.out.println(st.reverse().toString());//转位字符串输出
}
}