二进制到十进制数组

Binary to Decimal with Arrays

我正在尝试将二进制数(由包含 0 和 1 的数组构成)转换为十进制值。每次我 运行 程序,十进制值都偏离了。我想知道我的循环内的小数代码是否有误?这是我目前拥有的:

class Main {
    public static void main(String[] args) {
        int decimal = 0;
        int[] arrayNums = new int[8];
        for(int i=0; i<8; i++) {
            arrayNums[i] = (int)(Math.random()*2);
            System.out.print(arrayNums[i]);
        }
        for(int i=0; i<8; i++) {
            for(int j=7; j>=0; j--) {
                decimal += arrayNums[i]*(int)Math.pow(2,j);
            }
        }
        System.out.println();
        System.out.print("The decimal value is: " + decimal);
    }
}

你把要转换的循环复杂化了。像这样尝试。将前一个十进制值乘以 2,然后加上该位。每次乘法将值左移 1 位。您不需要 Math.pow() 方法,因为它会在您 "shift" 值时自动工作。我建议您在纸上尝试一下,看看它是如何工作的,以确保您理解它。

int decimal = 0;
for (int i = 0; i < 8; i++) {
    decimal = decimal * 2 + arrayNums[i];
}

让我们保留您现有的代码并尝试修复它(我还将稍微清理一下您的语法以获得良好的代码风格)。

截至目前,您的 for 循环正在以这种方式填充您的数组,其中每个列表条目都是循环的每次迭代:

  1. [0, , , , , , , ]
  2. [0,1, , , , , , ]
  3. ...
  4. ...
  5. ...
  6. ...
  7. ...
  8. [0,1,0,0,0,0,0,1]

请记住,当 i=0 时,我们处于 最重要的 位,这意味着它具有十进制值 128。

当您使用第二个 for 循环读取此数组时,实际上是从最高有效位开始,但将其提高到 0 次方,而不是 7 次方。 这就是为什么你的答案是错误的。让我们将其提高到 7-i 次方。

class Main 
{
    public static void main(String[] args) 
    {
        int n = 0;
        int decimal = 0;
        int[] arrayNums = new int[8];
        for(int i=0; i<8; i++)
        {
            arrayNums[i] = (int)(Math.random()*2);
            System.out.print(arrayNums[i]);
        }

        for(int i=0; i<8; i++)
        {
            decimal += arrayNums[i]*(int)Math.pow(2,7-i);

        }
        System.out.println("\nThe decimal value is: "+decimal);
    }
}

ps。 \n 只是一个转义字符,告诉控制台 window 打印一个新行。这只是为了格式化。