205

What would be the best way (ideally, simplest) to convert an int to a binary string representation in Java?

For example, say the int is 156. The binary string representation of this would be "10011100".

Arve
  • 7,284
  • 5
  • 37
  • 41
Tyler Treat
  • 14,640
  • 15
  • 80
  • 115

19 Answers19

408
Integer.toBinaryString(int i)
Jack
  • 131,802
  • 30
  • 241
  • 343
45

There is also the java.lang.Integer.toString(int i, int base) method, which would be more appropriate if your code might one day handle bases other than 2 (binary). Keep in mind that this method only gives you an unsigned representation of the integer i, and if it is negative, it will tack on a negative sign at the front. It won't use two's complement.

Neel Sandell
  • 429
  • 5
  • 12
izilotti
  • 4,757
  • 1
  • 48
  • 55
32
public static string intToBinary(int n)
{
    String s = "";
    while (n > 0)
    {
        s =  ( (n % 2 ) == 0 ? "0" : "1") +s;
        n = n / 2;
    }
    return s;
}
Spectric
  • 30,714
  • 6
  • 20
  • 43
Ariel Badilla
  • 329
  • 3
  • 2
23

One more way- By using java.lang.Integer you can get string representation of the first argument i in the radix (Octal - 8, Hex - 16, Binary - 2) specified by the second argument.

 Integer.toString(i, radix)

Example_

private void getStrtingRadix() {
        // TODO Auto-generated method stub
         /* returns the string representation of the 
          unsigned integer in concern radix*/
         System.out.println("Binary eqivalent of 100 = " + Integer.toString(100, 2));
         System.out.println("Octal eqivalent of 100 = " + Integer.toString(100, 8));
         System.out.println("Decimal eqivalent of 100 = " + Integer.toString(100, 10));
         System.out.println("Hexadecimal eqivalent of 100 = " + Integer.toString(100, 16));
    }

OutPut_

Binary eqivalent of 100 = 1100100
Octal eqivalent of 100 = 144
Decimal eqivalent of 100 = 100
Hexadecimal eqivalent of 100 = 64
Rupesh Yadav
  • 12,096
  • 4
  • 53
  • 70
5
public class Main  {

   public static String toBinary(int n, int l ) throws Exception {
       double pow =  Math.pow(2, l);
       StringBuilder binary = new StringBuilder();
        if ( pow < n ) {
            throw new Exception("The length must be big from number ");
        }
       int shift = l- 1;
       for (; shift >= 0 ; shift--) {
           int bit = (n >> shift) & 1;
           if (bit == 1) {
               binary.append("1");
           } else {
               binary.append("0");
           }
       }
       return binary.toString();
   }

    public static void main(String[] args) throws Exception {
        System.out.println(" binary = " + toBinary(7, 4));
        System.out.println(" binary = " + Integer.toString(7,2));
    }
}
5

This is something I wrote a few minutes ago just messing around. Hope it helps!

public class Main {

public static void main(String[] args) {

    ArrayList<Integer> powers = new ArrayList<Integer>();
    ArrayList<Integer> binaryStore = new ArrayList<Integer>();

    powers.add(128);
    powers.add(64);
    powers.add(32);
    powers.add(16);
    powers.add(8);
    powers.add(4);
    powers.add(2);
    powers.add(1);

    Scanner sc = new Scanner(System.in);
    System.out.println("Welcome to Paden9000 binary converter. Please enter an integer you wish to convert: ");
    int input = sc.nextInt();
    int printableInput = input;

    for (int i : powers) {
        if (input < i) {
            binaryStore.add(0);     
        } else {
            input = input - i;
            binaryStore.add(1);             
        }           
    }

    String newString= binaryStore.toString();
    String finalOutput = newString.replace("[", "")
            .replace(" ", "")
            .replace("]", "")
            .replace(",", "");

    System.out.println("Integer value: " + printableInput + "\nBinary value: " + finalOutput);
    sc.close();
}   

}

AbbyPaden
  • 592
  • 5
  • 5
5

Convert Integer to Binary:

import java.util.Scanner;

public class IntegerToBinary {

    public static void main(String[] args) {

        Scanner input = new Scanner( System.in );

        System.out.println("Enter Integer: ");
        String integerString =input.nextLine();

        System.out.println("Binary Number: "+Integer.toBinaryString(Integer.parseInt(integerString)));
    }

}

Output:

Enter Integer:

10

Binary Number: 1010

Tunaki
  • 132,869
  • 46
  • 340
  • 423
Sidarth
  • 69
  • 1
  • 4
  • 1
    Excessive promotion of a specific product/resource (that I removed here) may be perceived by the community as **spam**. Take a look at the [help], specially [What kind of behavior is expected of users?](http://stackoverflow.com/help/behavior)'s last section: _Avoid overt self-promotion_. You might also be interested in [How do I advertise on Stack Overflow?](http://stackoverflow.com/help/advertising). – Tunaki May 25 '16 at 12:17
5

The simplest approach is to check whether or not the number is odd. If it is, by definition, its right-most binary number will be "1" (2^0). After we've determined this, we bit shift the number to the right and check the same value using recursion.

@Test
public void shouldPrintBinary() {
    StringBuilder sb = new StringBuilder();
    convert(1234, sb);
}

private void convert(int n, StringBuilder sb) {

    if (n > 0) {
        sb.append(n % 2);
        convert(n >> 1, sb);
    } else {
        System.out.println(sb.reverse().toString());
    }
}
wild_nothing
  • 2,845
  • 1
  • 35
  • 47
  • 1
    This, I think, is a really elegant way to do it manually, if you really don't want to use the built-in methods. – praneetloke May 31 '18 at 00:39
4

Using built-in function:

String binaryNum = Integer.toBinaryString(int num);

If you don't want to use the built-in function for converting int to binary then you can also do this:

import java.util.*;
public class IntToBinary {
    public static void main(String[] args) {
        Scanner d = new Scanner(System.in);
        int n;
        n = d.nextInt();
        StringBuilder sb = new StringBuilder();
        while(n > 0){
        int r = n%2;
        sb.append(r);
        n = n/2;
        }
        System.out.println(sb.reverse());        
    }
}
Floern
  • 33,559
  • 24
  • 104
  • 119
4

here is my methods, it is a little bit convince that number of bytes fixed

private void printByte(int value) {
String currentBinary = Integer.toBinaryString(256 + value);
System.out.println(currentBinary.substring(currentBinary.length() - 8));
}

public int binaryToInteger(String binary) {
char[] numbers = binary.toCharArray();
int result = 0;
for(int i=numbers.length - 1; i>=0; i--)
  if(numbers[i]=='1')
    result += Math.pow(2, (numbers.length-i - 1));
return result;
}
Sirop4ik
  • 4,543
  • 2
  • 54
  • 121
3

Using bit shift is a little quicker...

public static String convertDecimalToBinary(int N) {

    StringBuilder binary = new StringBuilder(32);

    while (N > 0 ) {
        binary.append( N % 2 );
        N >>= 1;
     }

    return binary.reverse().toString();

}
Edward J Beckett
  • 5,061
  • 1
  • 41
  • 41
3

if the int value is 15, you can convert it to a binary as follows.

int x = 15;

Integer.toBinaryString(x);

if you have the binary value, you can convert it into int value as follows.

String binaryValue = "1010";

Integer.parseInt(binaryValue, 2);
Kalhara Tennakoon
  • 1,302
  • 14
  • 20
2

This can be expressed in pseudocode as:

while(n > 0):
    remainder = n%2;
    n = n/2;
    Insert remainder to front of a list or push onto a stack

Print list or stack
amoljdv06
  • 2,646
  • 1
  • 13
  • 18
2

You should really use Integer.toBinaryString() (as shown above), but if for some reason you want your own:

// Like Integer.toBinaryString, but always returns 32 chars
public static String asBitString(int value) {
  final char[] buf = new char[32];
  for (int i = 31; i >= 0; i--) {
    buf[31 - i] = ((1 << i) & value) == 0 ? '0' : '1';
  }
  return new String(buf);
}
overthink
  • 23,985
  • 4
  • 69
  • 69
1

My 2cents:

public class Integer2Binary {
    public static void main(String[] args) {
        final int integer12 = 12;
        System.out.println(integer12 + " -> " + integer2Binary(integer12));
        // 12 -> 00000000000000000000000000001100
    }

    private static String integer2Binary(int n) {
        return new StringBuilder(Integer.toBinaryString(n))
            .insert(0, "0".repeat(Integer.numberOfLeadingZeros(n)))
            .toString();
    }
}
0

This should be quite simple with something like this :

public static String toBinary(int number){
    StringBuilder sb = new StringBuilder();

    if(number == 0)
        return "0";
    while(number>=1){
        sb.append(number%2);
        number = number / 2;
    }

    return sb.reverse().toString();

}
0
public class BinaryConverter {

    public static String binaryConverter(int number) {
        String binary = "";
        if (number == 1){
            binary = "1";
            return binary;
        }
        if (number == 0){
            binary = "0";
            return binary;
        }
        if (number > 1) {
            String i = Integer.toString(number % 2);

            binary = binary + i;
            binaryConverter(number/2);
        }
        return binary;
    }
}
0

In order to make it exactly 8 bit, I made a slight addition to @sandeep-saini 's answer:

public static String intToBinary(int number){
        StringBuilder sb = new StringBuilder();

        if(number == 0)
            return "0";
        while(number>=1){
            sb.append(number%2);
            number = number / 2;
        }
        while (sb.length() < 8){
            sb.append("0");
        }

        return sb.reverse().toString();

    }

So now for an input of 1 you get an output of 00000001

Adnan Arshad
  • 370
  • 3
  • 15
0
public static String intToBinaryString(int n) {
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < 32 && n != 0; i++) {
        sb.append((n&1) == 1 ? "1" : "0");
        n >>= 1;
    }
    return sb.reverse().toString();
}

We cannot use n%2 to check the first bit, because it's not right for negtive integer. We should use n&1.

Eric
  • 36
  • 3