二进制到十进制数组
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 循环正在以这种方式填充您的数组,其中每个列表条目都是循环的每次迭代:
[0, , , , , , , ]
[0,1, , , , , , ]
...
...
...
...
...
[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 打印一个新行。这只是为了格式化。
我正在尝试将二进制数(由包含 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 循环正在以这种方式填充您的数组,其中每个列表条目都是循环的每次迭代:
[0, , , , , , , ]
[0,1, , , , , , ]
...
...
...
...
...
[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 打印一个新行。这只是为了格式化。