Java 十进制到二进制转换器
我一直在尝试编写一个小而简单的程序,将dec数字转换为bin。其思想是,当用户输入一个正整数作为-cycle时,它必须经历所有轮的数字/2偏差,但它还必须得到尾部(idk数学术语,实际上是实际的bin数字),并将它们写入一个数组中,这就是我遇到的问题。我已经预先定义了30的数组大小(在没有指定长度的情况下,无法找到创建工作数组的方法)。我的想法是,然后我可以创建一个长度=索引的反向数组(我从第一个循环开始)从上一个数组中选择另一个for cycle等。但是当我测试第一个数组时,我得到的是空括号:[]或根本没有打印,eclipse在代码中没有发现任何错误,我无法找出错误所在。我可以使用一些帮助。总之,代码如下:Java 十进制到二进制转换器,java,arrays,eclipse,Java,Arrays,Eclipse,我一直在尝试编写一个小而简单的程序,将dec数字转换为bin。其思想是,当用户输入一个正整数作为-cycle时,它必须经历所有轮的数字/2偏差,但它还必须得到尾部(idk数学术语,实际上是实际的bin数字),并将它们写入一个数组中,这就是我遇到的问题。我已经预先定义了30的数组大小(在没有指定长度的情况下,无法找到创建工作数组的方法)。我的想法是,然后我可以创建一个长度=索引的反向数组(我从第一个循环开始)从上一个数组中选择另一个for cycle等。但是当我测试第一个数组时,我得到的是空括号:
public static void decToBin(){
int n;
Scanner in = new Scanner(System.in);
System.out.println("Enter a positive integer:");
n = in.nextInt();
in.close();
if (n <= 0) {System.out.println("ERROR:n<=0");return;}
else if (n > 0){
int[] ostataci = new int[30];
for (int i = 0;n <= 0;i++){
ostataci[i] = n % 2;
n = n / 2;
// System.out.printf("%d %n", ostataci[i]); - even this one doesnt print at all
}
// System.out.println(Arrays.toString(ostataci)); - nor this one
}
}
public static void decToBin(){
int n;
扫描仪输入=新扫描仪(系统输入);
System.out.println(“输入一个正整数:”);
n=in.nextInt();
in.close();
if(n0){
int[]ostataci=新int[30];
对于(int i=0;n0){
i++;
ostataci[i]=n%2;
n=n/2;
}
}
int反向=i;
int[]反向=新的int[反向];
for(inti2=0;i2!=reverse;i--,i2++){
反向[i2]=ostataci[i];
系统输出打印(反转[i2]);
}
}
你的for循环对于(int i=0;n0){是错误的,你的代码会工作得很好。同样,把int[]ostataci=new int[30];
改成int[]ostataci=new int[32];
尽管你的for循环最好使用列表
而不是数组(int i=0;n直接误差在for循环中:
else if(n>0){
//因为n>0,所以它永远不会运行
对于(int i=0;n小数已经在计算机上转换为二进制,为什么不使用逐位操作检查保存的整数?例如,要检查int的n位是否已设置,请计算布尔值(数字>>n)&1
。只要把它放在一个循环中,就完成了。其他人都把它弄得太复杂了。这里有另一种方法,使用移位运算符和位掩码:
public static int[] dec2bin(int n) {
int[] result = new int[32];
for (int i = 0; i < 32; i++) {
result[31-i] = n & 0x1;
n >>= 1;
}
return result;
}
输出:
00000000000000000000000000000101
解释
上面的代码n&0x1
是位屏蔽。0x1是数字1
的十六进制表示法。在二进制中,该数字如下所示:
00000001
在for循环的第一次迭代中,n
如下所示:
00000101
&
运算符逐位(按位)执行操作比较两个数字中的位,将它们“和”在一起,根据这些比较生成一个新的数字。如果其中一个或两个对应的位都是0
,则结果位是0
。如果两者都是1
,则结果位是1
。因此,对于上面列出的两个数字,'把它们放在一起是:
00000001
或者,在十进制中,1
。您会注意到,这也是n
中最右边位的位值。我们将其保存到最右边索引处的结果
数组中
接下来,我们将(>
)n
右移1
。这会将每一位移一位(最右边的位丢失),得到的n
现在是:
00000010
我们将该过程重复32次(对于int
的32位中的每一位),最后得到一个结果
数组,其中包含正确的答案。尝试以下方法:
Try this:
package mypackage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.Arrays;
public class Converter{
final static int ARRAY_SIZE = 30;
public static void main(String[] args){
int n;
Scanner in = new Scanner(System.in);
System.out.println("Enter a positive integer:");
n = in.nextInt();
in.close();
if (n <= 0){
System.out.println("ERROR:n<=0");
return;
}else if (n > 0){
int[] ostataci = new int[ARRAY_SIZE];
int i = 0;
while (n>0){
ostataci[i] = n % 2;
i++;
n = n / 2;
System.out.printf("%d %n", ostataci[i]);
}
System.out.println("All done!");
System.out.println(Arrays.toString(ostataci));
}
}
}
包我的包;
导入java.io.BufferedReader;
导入java.io.IOException;
导入java.io.InputStreamReader;
导入java.util.Scanner;
导入java.util.array;
公共类转换器{
最终静态整数数组_SIZE=30;
公共静态void main(字符串[]args){
int n;
扫描仪输入=新扫描仪(系统输入);
System.out.println(“输入一个正整数:”);
n=in.nextInt();
in.close();
if(n0){
int[]ostataci=新int[数组大小];
int i=0;
而(n>0){
ostataci[i]=n%2;
i++;
n=n/2;
System.out.printf(“%d%n”,ostataci[i]);
}
System.out.println(“全部完成!”);
System.out.println(Arrays.toString(ostataci));
}
}
}
试试ArrayList。你可能想在这方面有所收获:这是一个很好的算法练习。仅供参考,对于生产使用,Integer。toString(你的数字,2)
完成这项工作。
00000101
00000001
00000010
Try this:
package mypackage;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Scanner;
import java.util.Arrays;
public class Converter{
final static int ARRAY_SIZE = 30;
public static void main(String[] args){
int n;
Scanner in = new Scanner(System.in);
System.out.println("Enter a positive integer:");
n = in.nextInt();
in.close();
if (n <= 0){
System.out.println("ERROR:n<=0");
return;
}else if (n > 0){
int[] ostataci = new int[ARRAY_SIZE];
int i = 0;
while (n>0){
ostataci[i] = n % 2;
i++;
n = n / 2;
System.out.printf("%d %n", ostataci[i]);
}
System.out.println("All done!");
System.out.println(Arrays.toString(ostataci));
}
}
}