Decimal-to-binary conversion
Solution 1
I assume you want to write your own code -- otherwise this is straightforward to do using methods from the standard Java library.
Some quick comments:
- You can get rid of the
res
temp vars. Work directly onnumber
(remember that Java passes parameters by value). - Shift is more efficient than division (
number >>>= 1
instead ofnumber /= 2
), although the compiler should be able to optimize this anyway - You can avoid the modulus in
decToBin
if you just doarray[k] = number & 1;
- While you are at it, why not call
getBinArray
fromdecToBin
directly? Then you can calldecToBin
with only one arg -- the value to convert.
Here is a slightly optimized version of your code:
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;
}
Solution 2
Why not just use the toBinaryString method of the Integer class:
System.out.println(Integer.toBinaryString(12))
Solution 3
If this isn't homework, no need to do it yourself. The following code should work:
BigInteger bigInt = new BigInteger(number);
String asString = bigInt.toString(2);
There might be more efficient ways, but this is certainly very readable and maintainable.
Solution 4
There are some small things that you can improve:
- You should define a "high-level" method that converts an
int
to anint[]
. In the current code you have to mention the12
two times, which is bad. - You should use a
do { ... } while (number != 0)
loop. Otherwise the number0
will be represented by an empty array. - You should use
x >>> 1
instead ofx / 2
, since that handles negative numbers correctly. - If you want to check that your code is correct, write another method that converts back from binary to
int
. Then you can check thatbinToDec(decToBin(12, ...)) == 12
. - The method
getBinArray
should not bepublic
, since it is only a helper method. You can either replace thepublic
withprivate
or just remove thepublic
.
Comments
-
DarkLeafyGreen almost 2 years
I want to convert decimal numbers to binary numbers. I want to store them in an array. First I need to create an array that has a certain length so that I can store the binary numbers. After that I perform the conversion, here is how I do it:
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; } }
Is there anything to improve? It should print 1100 for input of 12.