我想将十进制数转换为二进制数。我想将它们存储在一个数组中。 首先,我需要创建一个具有一定长度的数组,以便我可以存储二进制数。之后我执行转换,这是我如何做的:
public class Aufg3 {
public static void main(String[] args) {
int[] test = decToBin(12, getBinArray(12));
for(int i = 0; i < test.length; i++){
System.out.println(test[i]);
}
}
public static int[] getBinArray(int number){
int res = number, length = 0;
while(res != 0){
res /= 2;
length++;
}
return new int[length];
}
public static int[] decToBin(int number, int[] array){
int res = number, k = array.length-1;
while(res != 0){
if(res%2 == 0){
array[k] = 0;
}else{
array[k] = 1;
}
k--;
res /= 2;
}
return array;
}
}
有什么需要改进的吗?它应该打印1100输入12。
答案 0 :(得分:6)
为什么不使用Integer类的toBinaryString方法:
System.out.println(Integer.toBinaryString(12))
答案 1 :(得分:3)
我假设你想编写自己的代码 - 否则这很容易使用标准Java库中的方法。
一些快速评论:
res
临时变量。直接在number
上工作(请记住Java按值传递参数)。number >>>= 1
而不是number /= 2
)更有效,尽管编译器应该能够优化它decToBin
array[k] = number & 1;
中的模数
getBinArray
致电decToBin
?然后你可以只用一个arg - 要转换的值来调用decToBin
。以下是代码的略微优化版本:
public static int[] getBinArray(int number) {
int length = 0;
while (number != 0) {
number >>>= 1;
length++;
}
return new int[length];
}
public static int[] decToBin(int number) {
int[] array = getBinArray(number);
int k = array.length-1;
while (number != 0)
{
array[k--] = number & 1;
number >>>= 1;
}
return array;
}
答案 2 :(得分:2)
如果这不是作业,则不需要自己动手。以下代码应该有效:
BigInteger bigInt = new BigInteger(number);
String asString = bigInt.toString(2);
可能有更有效的方法,但这肯定是非常易读和可维护的。
答案 3 :(得分:1)
您可以改进一些小事:
int
转换为int[]
的“高级”方法。在当前代码中,您必须提及12
两次,这很糟糕。do { ... } while (number != 0)
循环。否则,数字0
将由空数组表示。x >>> 1
代替x / 2
,因为这样可以正确处理负数。int
的方法。然后,您可以检查binToDec(decToBin(12, ...)) == 12
。getBinArray
不应该是public
,因为它只是辅助方法。您可以将public
替换为private
,也可以只删除public
。