Cetak bilangan bulat dalam format biner di Jawa

277

Saya memiliki nomor dan saya ingin mencetaknya dalam bentuk biner. Saya tidak ingin melakukannya dengan menulis algoritma, Apakah ada fungsi bawaan untuk itu di Java?

akshayxyz
sumber

Jawaban:

434

Asumsikan maksud Anda "bawaan":

int x = 100;
System.out.println(Integer.toBinaryString(x));

Lihat dokumentasi Integer .

( Longmemiliki metode yang serupa, BigIntegermemiliki metode turunan di mana Anda dapat menentukan radix.)

Jon Skeet
sumber
2
Ini menyisakan 0 terkemuka
Abu Ruqaiyah
1
@AbuRuqaiyah: OP tidak pernah menyebut angka nol di depan, dan kita perlu tahu berapa banyak yang mereka harapkan untuk satu hal ...
Jon Skeet
@AbuRuqaiyah Jika Anda ingin memimpin nol, ada System.out.printf () yang memberi Anda banyak kontrol.
NomadMaker
246

Di sini tidak perlu hanya bergantung pada format biner atau lainnya ... satu fungsi bawaan fleksibel tersedia Yang mencetak format mana pun yang Anda inginkan dalam program Anda .. Integer.toString (int, representasi);

Integer.toString(100,8) // prints 144 --octal representation

Integer.toString(100,2) // prints 1100100 --binary representation

Integer.toString(100,16) //prints 64 --Hex representation
Mohasin Ali
sumber
mengujinya dengan angka yang berbeda, negatif, positif, besar, kecil
Tertium
8
toBinaryStringmenggunakan output komplemen dua, toStringmenutupi nomor basis yang ditentukan dan menempatkan tanda negatif di depan, jaditoString(-8, 2) == "-1000"
Joe
66
System.out.println(Integer.toBinaryString(343));
adarshr
sumber
21

Saya membutuhkan sesuatu untuk mencetak dengan baik dan memisahkan bit setiap n-bit. Dengan kata lain tampilkan angka nol di depan dan tampilkan sesuatu seperti ini:

n = 5463
output = 0000 0000 0000 0000 0001 0101 0101 0111

Jadi, inilah yang saya tulis:

/**
 * Converts an integer to a 32-bit binary string
 * @param number
 *      The number to convert
 * @param groupSize
 *      The number of bits in a group
 * @return
 *      The 32-bit long bit string
 */
public static String intToString(int number, int groupSize) {
    StringBuilder result = new StringBuilder();

    for(int i = 31; i >= 0 ; i--) {
        int mask = 1 << i;
        result.append((number & mask) != 0 ? "1" : "0");

        if (i % groupSize == 0)
            result.append(" ");
    }
    result.replace(result.length() - 1, result.length(), "");

    return result.toString();
}

Aktifkan seperti ini:

public static void main(String[] args) {
    System.out.println(intToString(5463, 4));
}
Maghoumi
sumber
Mengapa result.replace(result.length() - 1, result.length(), "");diperlukan? Seperti yang kita lewati intyang sudah 32-bit. Apa yang kita ganti pada baris terakhir kedua?
Parth
1
@Parth Pada setiap langkah kita menambahkan karakter spasi ("") ke akhir string. Baris yang Anda sebutkan akan menghilangkan karakter spasi tambahan terakhir. Pada dasarnya, Anda bisa memanggil fungsi Stringkelas trimuntuk mencapai efek yang sama.
Maghoumi
Anda dapat melakukan ini lebih sederhana dan efisien dengan menambahkan 0x100000000 ke angka, mengubahnya menjadi panjang, dan kemudian membuang 1. yang terkemuka.
Marquis of Lorne
7

Sekolah tua:

    int value = 28;
    for(int i = 1, j = 0; i < 256; i = i << 1, j++)
        System.out.println(j + " " + ((value & i) > 0 ? 1 : 0));
David Williams
sumber
Saya pikir System.out.printlndan &dibangun di dalam;)
David Williams
1
baru sadar kalau saya berkomentar setelah 3 tahun jawabannya ... lol.
rajugaadu
7
public static void main(String[] args) 
{
    int i = 13;
    short s = 13;
    byte b = 13;

    System.out.println("i: " + String.format("%32s", 
            Integer.toBinaryString(i)).replaceAll(" ", "0"));

    System.out.println("s: " + String.format("%16s", 
            Integer.toBinaryString(0xFFFF & s)).replaceAll(" ", "0"));

    System.out.println("b: " + String.format("%8s", 
            Integer.toBinaryString(0xFF & b)).replaceAll(" ", "0"));

}

Keluaran:

i: 00000000000000000000000000001101
s: 0000000000001101
b: 00001101
Seyit Bilal
sumber
6

lihat logika ini dapat mengonversi angka ke basis apa pun

public static void toBase(int number, int base) {
    String binary = "";
    int temp = number/2+1;
    for (int j = 0; j < temp ; j++) {
        try {
            binary += "" + number % base;

            number /= base;
        } catch (Exception e) {
        }
    }
    for (int j = binary.length() - 1; j >= 0; j--) {
        System.out.print(binary.charAt(j));
    }
}

ATAU

StringBuilder binary = new StringBuilder();
int n=15;
while (n>0) {
    if((n&1)==1){
        binary.append(1);
    }else
        binary.append(0);
    n>>=1;
}
System.out.println(binary.reverse());
Zahid Ali
sumber
1
untuk input sebagai 0, `if (a == 0) {binary.append (0); System.out.println (binary.toString ()); kembali; } `kita perlu menambahkan baris ini dalam solusi kedua di atas while loop.
Imran
4

Ini adalah cara paling sederhana untuk mencetak representasi biner internal integer. Sebagai Contoh : Jika kita mengambil n sebagai 17 maka hasilnya adalah: 0000 0000 0000 0000 0000 0000 0001 0001

void bitPattern(int n) {

        int mask = 1 << 31;
        int count = 0;
        while(mask != 0) {
            if(count%4 == 0)
                System.out.print(" ");

            if((mask&n) == 0) 

                System.out.print("0");



            else 
                System.out.print("1");


            count++;
            mask = mask >>> 1;


    }
    System.out.println();
}
shoaib Khan
sumber
4

Coba saja. Jika ruang lingkup hanya mencetak nilai biner dari nilai integer yang diberikan. Itu bisa positif atau negatif.

      public static void printBinaryNumbers(int n) {
        char[] arr = Integer.toBinaryString(n).toCharArray();
        StringBuilder sb = new StringBuilder();
        for (Character c : arr) {
          sb.append(c);
        }
        System.out.println(sb);
      }

memasukkan

5

Keluaran

101

Ganesa Vijayakumar
sumber
2

Solusi menggunakan tampilan 32 bit,

public static String toBinaryString(int n){

    StringBuilder res=new StringBuilder();
    //res= Integer.toBinaryString(n); or
    int displayMask=1<<31;
    for (int i=1;i<=32;i++){
        res.append((n & displayMask)==0?'0':'1');
        n=n<<1;
        if (i%8==0) res.append(' ');
    }

    return res.toString();
}


 System.out.println(BitUtil.toBinaryString(30));


O/P:
00000000 00000000 00000000 00011110 
dhanu10896
sumber
2

Solusi sederhana dan cukup mudah.

public static String intToBinaryString(int integer, int numberOfBits) {

    if (numberOfBits > 0) {     // To prevent FormatFlagsConversionMismatchException.

        String nBits = String.format("%" + numberOfBits + "s",      // Int to bits conversion
                Integer.toBinaryString(integer))
                .replaceAll(" ","0"); 

        return nBits;   // returning the Bits for the given int.
    }

    return null;        // if the numberOfBits is not greater than 0, returning null.
}
Jack Reez
sumber
1

Sudah ada jawaban bagus yang diposting di sini untuk pertanyaan ini. Tapi, inilah cara saya mencoba sendiri (dan mungkin berbasis logika termudah → modulo / divide / add ):

        int decimalOrBinary = 345;
        StringBuilder builder = new StringBuilder();

        do {
            builder.append(decimalOrBinary % 2);
            decimalOrBinary = decimalOrBinary / 2;
        } while (decimalOrBinary > 0);

        System.out.println(builder.reverse().toString()); //prints 101011001

sumber
0

Pertanyaannya rumit di java (dan mungkin juga dalam bahasa lain).

Integer adalah tipe data yang ditandatangani 32-bit , tetapi Integer.toBinaryString () mengembalikan representasi string dari argumen integer sebagai integer yang tidak ditandatangani di basis 2.

Jadi, Integer.parseInt (Integer.toBinaryString (X), 2) dapat menghasilkan pengecualian (ditandatangani vs. tidak ditandatangani).

Cara aman adalah menggunakan Integer.toString (X, 2); ini akan menghasilkan sesuatu yang kurang elegan:

-11110100110

Tapi itu berhasil !!!

ninja
sumber
Dia ingin mencetaknya, bukan menguraikannya.
Marquis of Lorne
System.out.println (Integer.toString (X, 2));
ninja
0

Saya pikir ini adalah algoritma paling sederhana sejauh ini (bagi mereka yang tidak ingin menggunakan fungsi bawaan):

public static String convertNumber(int a)  { 
              StringBuilder sb=new StringBuilder();
              sb.append(a & 1);
              while ((a>>=1) != 0)  { 
                  sb.append(a & 1);
               }
              sb.append("b0");
              return sb.reverse().toString();
  }

Contoh:

convertNumber (1) -> "0b1"

convertNumber (5) -> "0b101"

convertNumber (117) -> "0b1110101"

Cara kerjanya: while-loop memindahkan angka ke kanan (mengganti bit terakhir dengan second-to-last, dll), mendapatkan nilai bit terakhir dan meletakkannya di StringBuilder, ulangi sampai tidak ada bit yang tersisa (saat itulah a = 0).

parsecer
sumber
0
    for(int i = 1; i <= 256; i++)
    {
        System.out.print(i + " "); //show integer
        System.out.println(Integer.toBinaryString(i) + " "); //show binary
        System.out.print(Integer.toOctalString(i) + " "); //show octal
        System.out.print(Integer.toHexString(i) + " "); //show hex

    }
tukang bajak
sumber
3
Terima kasih banyak atas jawabannya, namun tolong tambahkan lebih banyak deskripsi dan / atau informasi dan bagaimana memecahkan masalah yang ditanyakan sehingga orang lain dapat dengan mudah memahaminya tanpa meminta klarifikasi :)
koceeng
0

Coba dengan cara ini:

public class Bin {
  public static void main(String[] args) {
    System.out.println(toBinary(0x94, 8));
  }

  public static String toBinary(int a, int bits) {
    if (--bits > 0)
        return toBinary(a>>1, bits)+((a&0x1)==0?"0":"1");
    else 
        return (a&0x1)==0?"0":"1";
  }

}

10010100

pengguang001
sumber
0

Representasi biner dari int x yang diberikan dengan nol di sebelah kiri:

org.apache.commons.lang3.StringUtils.leftPad(Integer.toBinaryString(x), 32, '0')
ankitkpd
sumber
0

Masukkan angka desimal sebagai input. Setelah itu kita beroperasi seperti modulo dan divisi untuk mengubah input yang diberikan menjadi angka biner. Berikut adalah kode sumber dari Program Java untuk Mengkonversi Nilai Integer menjadi Biner dan jumlah bit biner ini untuk angka desimalnya. Program Java berhasil dikompilasi dan dijalankan pada sistem Windows. Output program juga ditunjukkan di bawah ini.

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int integer ;
        String binary = "";    //   here we count "" or null 
                               //   just String binary = null;
        System.out.print("Enter the binary Number: ");
        integer = sc.nextInt();

        while(integer>0)
        {
            int x = integer % 2;
            binary = x + binary;
            integer = integer / 2;  
        }
        System.out.println("Your binary number is : "+binary);
        System.out.println("your binary length : " + binary.length());
    }
}
Md. Tarikul Islam
sumber
0

Karena tidak ada jawaban yang diterima, mungkin pertanyaan Anda tentang bagaimana menyimpan integer dalam file biner. java.io.DataOutputStream mungkin yang Anda cari: https://docs.oracle.com/javase/8/docs/api/java/io/DataOutputStream.html

DataOutputStream os = new DataOutputStream(outputStream);
os.writeInt(42);
os.flush();
os.close();
Christian Charbula
sumber
2
sebagian besar waktu pencetakan berarti menulis sesuatu ke konsol, bukan untuk menyimpan dalam file. Jawaban Anda bisa berguna jika diminta untuk membuat serialisasi data ke file.
Alain-Michel Chomnoue N
Tentu saja, tetapi karena si penanya tidak menerima jawaban apa pun, saya menduga pertanyaannya tidak akurat.
Christian Charbula
0

Anda dapat menggunakan bit mask (1 << k) dan melakukan DAN pengoperasian dengan angka! 1 << k memiliki satu bit pada posisi k!

private void printBits(int x) {
    for(int i = 31; i >= 0; i--) {
        if((x & (1 << i)) != 0){
            System.out.print(1);
        }else {
            System.out.print(0);
        }
    }
    System.out.println();
}
parveen
sumber
-2

Ini bekerja dengan nilai yang ditandatangani dan tidak ditandatangani menggunakan manipulasi bit yang kuat dan menghasilkan nol pertama di sebelah kiri.

public static String representDigits(int num) {

        int checkBit = 1 << (Integer.SIZE * 8 - 2 );    // avoid the first digit        
        StringBuffer sb = new StringBuffer();

        if (num < 0 ) {     // checking the first digit
            sb.append("1");
        } else {
            sb.append("0");
        }

        while(checkBit != 0) {          
            if ((num & checkBit) == checkBit){
                sb.append("1");
            } else {
                sb.append("0");
            }           
            checkBit >>= 1;     
        }       

        return sb.toString();
    }
Róbert Kovács
sumber