Jawaban:
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.)
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
toBinaryStringmenggunakan output komplemen dua, toStringmenutupi nomor basis yang ditentukan dan menempatkan tanda negatif di depan, jaditoString(-8, 2) == "-1000"
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));
}
result.replace(result.length() - 1, result.length(), "");diperlukan? Seperti yang kita lewati intyang sudah 32-bit. Apa yang kita ganti pada baris terakhir kedua?
Stringkelas trimuntuk mencapai efek yang sama.
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));
System.out.printlndan &dibangun di dalam;)
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
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());
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();
}
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
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
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.
}
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
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 !!!
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).
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
}
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
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());
}
}
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();
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();
}
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();
}