Java中的十进制到二进制分配

时间:2018-11-15 11:57:20

标签: java binary

嗨,我有一个作业,我必须转换一个变量“二进制”(它是一个随机二进制(例如11001))并打印出来。

这很困难,因为没有Java内置的效能功能

示例:1010 = 1 * 2 ^ 3 + 0 * 2 ^ 2 + 1 * 2 ^ 1 + 0 * 2 ^ 0 = 8 + 0 + 2 + 0 = 10

我的代码怎么了?

int a = 1;
int b = 0;
for (int i=binary.length()-1;i>0;i--){
    if (binary.charAt(binary.length()-1) == '1'){
        b += 1;
    if (binary.charAt(i) == '1'){
        for (int j=binary.length()-1;j>0;i--){
            a = a*2;
        }
    }
    }
}
System.out.println(a+b);

当前仅打印“ 1”

3 个答案:

答案 0 :(得分:2)

实际上,IntegerparseInt(String s, int radix)中有一个静态方法可以解决您的问题:

String binary = "11001010110";
int result = Integer.parseInt(binary, 2);

答案 1 :(得分:1)

您正在从最低有效数字到最高有效数字进行迭代(尽管您跳过了最高有效数字),但是由于某些原因,您始终检查最后一个字符是否为“ 1”,而不是检查当前字符

使用与您的循环类似的代码,我建议:

int result = 0;
int a = 1;
for (int i = binary.length() - 1; i >= 0; i--) {
    if (binary.charAt(i) == '1') {
        result += a; // this adds 2^k to the result for each '1' digit, since a is initialized
                     // to 2^0 and is multiplied by 2 in each iteration
    }
    a *= 2;
}

例如,如果binary初始化为“ 10010011”,则result147

答案 2 :(得分:0)

您的代码尝试使用for循环来计算2的每个幂,这是可以的,尽管Java中有更简单的方法。
按照您的标准,您可以执行以下操作:

String binary = "111011";
int sum = 0;
for (int i = binary.length() - 1; i >= 0 ; i--){
    if (binary.charAt(i) == '1'){
        int a = 1;
        for (int j = 1; j < binary.length() - i; j++) {
            a *= 2;
        }
        sum += a;
    }
}
System.out.println(sum);

它打印59
代码中出现的错误是条件i > 0
应为i >= 0,否则您将丢失字符串的第一个字符。