[英]Decimal-to-binary conversion
我想将十进制数转换为二进制数。 我想将它们存储在一个数组中。 首先,我需要创建一个具有一定长度的数组,以便我可以存储二进制数。 之后我执行转换,这是我如何做到的:
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。
为什么不直接使用Integer类的toBinaryString方法:
System.out.println(Integer.toBinaryString(12))
我假设你想编写自己的代码 - 否则这很容易使用标准Java库中的方法。
一些快速评论:
res
临时变量。 直接在number
上工作(记住Java按值传递参数)。 number >>>= 1
而不是number /= 2
),尽管编译器应该能够优化它 array[k] = number & 1;
你可以避免decToBin
的模array[k] = number & 1;
decToBin
调用getBinArray
? 然后你可以只用一个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;
}
如果这不是功课,则不需要自己动手。 以下代码应该有效:
BigInteger bigInt = new BigInteger(number);
String asString = bigInt.toString(2);
可能有更有效的方法,但这当然是非常易读和可维护的。
您可以改进一些小事:
int
转换为int[]
的“高级”方法。 在当前的代码中你必须提到12
次,这很糟糕。 do { ... } while (number != 0)
循环。 否则,数字0
将由空数组表示。 x >>> 1
而不是x / 2
,因为它正确处理负数。 int
。 然后你可以检查binToDec(decToBin(12, ...)) == 12
。 getBinArray
不应该是public
,因为它只是一个辅助方法。 您可以使用private
替换public
,也可以删除public
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.