将一个数字字符串变为八位二进制数然后相加,最后结果为一个二进制数

2020-04-06  本文已影响0人  大头tb

//测试字符串

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));

上一篇下一篇

猜你喜欢

热点阅读