将一个数字字符串变为八位二进制数然后相加,最后结果为一个二进制数
//测试字符串
String xxx ="1234";
//将字符串转换为字符数组
char[] arr = xxx.toCharArray();
//得到数组长度,避免多次调用
int len = arr.length;
//创建一个字符串数组,数组长度为测试字符串“xxx”的长度
String[] strings =new String[len];
//得到每一个字符串的二进制数,并将二进制数补全为八位
for (int i =0; i < len; i++) {
String temp = Integer.toBinaryString(Character.getNumericValue(arr[i]));
strings[i] = temp;
//是在这里补全的
if (temp.length() <8) {
for (int j =0; j <8 - temp.length(); j++) {
strings[i] ="0" + strings[i];
}
}
}
//新建一个StringBuilder用于存储最后相加的结果,这样可以使用append方法
StringBuilder result =new StringBuilder();
//转换为string对象
String xxxx = result.toString();
//System.out.println(xxxx);
for (int i =0; i < strings.length; i++) {
//取两个字符串进行相加
String a = xxxx;
String b = strings[i];
int al = a.length() -1;
int bl = b.length() -1;
int carry =0;//这个‘carry’代表进位
//m每次对应位置相加并判断是否需要进位(倒着进行)
while (al >=0 || bl >=0) {
//每次sum都要继承之前的进位carry,如果carry为0表示有进位,为1表示没有进位
int sum = carry;
if (al >=0) {
sum += (a.charAt(al) -'0');
al--;
}
if (bl >=0) {
sum += (b.charAt(bl) -'0');
bl--;
}
System.out.println("------" + sum);
result.append(sum %2); //相加结果
carry = sum /2; //进位,如果是1那么carry=0,如果是2则要进位给下面一位+1
}
if (carry !=0) //都相加完了,还要进位的情况
{
result.append(1);
}
System.out.println(i +":" + result.substring(0,8));
xxxx = result.reverse().toString().substring(0,8);
System.out.println(i +":" + result.toString()); //先反转,再输出
result.delete(0, result.length());
}
System.out.println("last:" + Integer.parseInt(xxxx));