Bilangan Biner di Jawa

1. Perkenalan

Sistem bilangan biner menggunakan 0 dan 1 untuk merepresentasikan bilangan. Komputer menggunakan bilangan biner untuk menyimpan dan menjalankan operasi pada data apa pun.

Dalam tutorial ini, kita akan belajar bagaimana mengubah biner menjadi desimal dan sebaliknya. Juga, kami akan melakukan penjumlahan dan pengurangan pada mereka.

2. Literal Biner

Java 7 memperkenalkan literal biner. Ini menyederhanakan penggunaan bilangan biner.

Untuk menggunakannya, kita perlu mengawali angka dengan 0B atau 0b:

@Test public void given_binaryLiteral_thenReturnDecimalValue() { byte five = 0b101; assertEquals((byte) 5, five); short three = 0b11; assertEquals((short) 3, three); int nine = 0B1001; assertEquals(9, nine); long twentyNine = 0B11101; assertEquals(29, twentyNine); int minusThirtySeven = -0B100101; assertEquals(-37, minusThirtySeven); }

3. Konversi Bilangan Biner

Di bagian ini, kita akan belajar cara mengubah bilangan biner menjadi format desimalnya dan sebaliknya. Di sini, pertama kita akan menggunakan fungsi Java built-in untuk konversi, dan kemudian kita akan menulis metode kustom kita untuk hal yang sama.

3.1. Desimal ke Bilangan Biner

Integer memiliki fungsi bernama toBinaryString untuk mengubah angka desimal menjadi string binernya:

@Test public void given_decimalNumber_then_convertToBinaryNumber() { assertEquals("1000", Integer.toBinaryString(8)); assertEquals("10100", Integer.toBinaryString(20)); }

Sekarang, kita dapat mencoba menulis logika kita sendiri untuk konversi ini. Sebelum menulis kodenya, mari kita pahami dulu cara mengubah bilangan desimal menjadi bilangan biner.

Untuk mengubah bilangan desimal n menjadi format binernya, kita perlu:

  1. Bagilah n dengan 2, catat hasil bagi q dan sisanya r
  2. Bagilah q dengan 2, catat hasil bagi dan sisanya
  3. Ulangi langkah 2 sampai kita mendapatkan 0 sebagai hasil bagi
  4. Gabungkan dalam urutan terbalik semua sisa

Mari kita lihat contoh mengubah 6 menjadi format biner yang setara:

  1. Pertama, bagi 6 dengan 2: hasil bagi 3, sisa 0
  2. Kemudian, bagi 3 dengan 2: hasil bagi 1, sisa 1
  3. Dan terakhir, bagi 1 dengan 2: hasil bagi 0, sisa 1
  4. 110

Sekarang mari kita terapkan algoritma di atas:

public Integer convertDecimalToBinary(Integer decimalNumber) { if (decimalNumber == 0) { return decimalNumber; } StringBuilder binaryNumber = new StringBuilder(); Integer quotient = decimalNumber; while (quotient > 0) { int remainder = quotient % 2; binaryNumber.append(remainder); quotient /= 2; } binaryNumber = binaryNumber.reverse(); return Integer.valueOf(binaryNumber.toString()); }

3.2. Biner ke Angka Desimal

Untuk mengurai string biner, kelas Integer menyediakan fungsi parseInt :

@Test public void given_binaryNumber_then_ConvertToDecimalNumber() { assertEquals(8, Integer.parseInt("1000", 2)); assertEquals(20, Integer.parseInt("10100", 2)); }

Di sini, fungsi parseInt mengambil dua parameter sebagai masukan:

  1. String biner yang akan diubah
  2. Radix atau basis dari sistem bilangan di mana string input harus diubah

Sekarang, mari kita coba menulis logika kita sendiri untuk mengubah bilangan biner menjadi desimal:

  1. Mulailah dengan digit paling kanan
  2. Kalikan setiap digit dengan 2 ^ {posisi} dari digit itu - di sini, posisi digit paling kanan adalah nol dan akan bertambah seiring kita bergerak ke sisi kiri
  3. Tambahkan hasil dari semua perkalian untuk mendapatkan angka desimal akhir

Sekali lagi, mari kita lihat metode kami beraksi:

  1. Pertama, 101011 = (1 * 2 ^ 5) + (0 * 2 ^ 4) + (1 * 2 ^ 3) + (0 * 2 ^ 2) + (1 * 2 ^ 1) + (1 * 2 ^ 0 )
  2. Berikutnya, 101011 = (1 * 32) + (0 * 16) + (1 * 8) + (0 * 4) + (1 * 2) + (1 * 1)
  3. Maka, 101011 = 32 + 0 + 8 + 0 + 2 + 1
  4. Dan akhirnya, 101011 = 43

Akhirnya mari kita kode langkah-langkah di atas:

public Integer convertBinaryToDecimal(Integer binaryNumber) { Integer decimalNumber = 0; Integer base = 1; while (binaryNumber > 0) { int lastDigit = binaryNumber % 10; binaryNumber = binaryNumber / 10; decimalNumber += lastDigit * base; base = base * 2; } return decimalNumber; }

4. Operasi Aritmatika

Di bagian ini, kita akan berkonsentrasi pada melakukan operasi aritmatika pada bilangan biner.

4.1. Tambahan

Sama seperti penjumlahan angka desimal, kami mulai menambahkan angka dari digit paling kanan.

Saat menambahkan dua digit biner, kita perlu mengingat aturan berikut:

  • 0 + 0 = 0
  • 0 + 1 = 1
  • 1 + 1 = 10
  • 1 + 1 + 1 = 11

Aturan ini dapat diterapkan sebagai:

public Integer addBinaryNumber(Integer firstNum, Integer secondNum) { StringBuilder output = new StringBuilder(); int carry = 0; int temp; while (firstNum != 0 || secondNum != 0) { temp = (firstNum % 10 + secondNum % 10 + carry) % 2; output.append(temp); carry = (firstNum % 10 + secondNum % 10 + carry) / 2; firstNum = firstNum / 10; secondNum = secondNum / 10; } if (carry != 0) { output.append(carry); } return Integer.valueOf(output.reverse().toString()); }

4.2. Pengurangan

Ada banyak cara untuk mengurangi bilangan biner. Pada bagian ini, kita akan mempelajari metode komplemen untuk melakukan pengurangan.

Pertama-tama, mari kita pahami apa yang melengkapi suatu bilangan.

Komplemen satu bilangan adalah bilangan yang diperoleh dengan meniadakan setiap digit bilangan biner. Itu berarti ganti 1 dengan 0 dan 0 dengan 1 :

public Integer getOnesComplement(Integer num) { StringBuilder onesComplement = new StringBuilder(); while (num > 0) { int lastDigit = num % 10; if (lastDigit == 0) { onesComplement.append(1); } else { onesComplement.append(0); } num = num / 10; } return Integer.valueOf(onesComplement.reverse().toString()); }

Untuk melakukan pengurangan dua bilangan biner menggunakan komplemen satu, kita perlu:

  1. Hitung satu komplemen dari subtrahend s
  2. Tambahkan s dan minuend
  3. Jika carry dihasilkan di langkah 2, tambahkan carry tersebut ke hasil langkah 2 untuk mendapatkan jawaban akhir.
  4. Jika carry tidak dihasilkan di langkah 2, maka pelengkap satu dari hasil langkah 2 adalah jawaban akhir. Tetapi dalam kasus ini, jawabannya negatif

Mari terapkan langkah-langkah di atas:

public Integer substractBinaryNumber(Integer firstNum, Integer secondNum) { int onesComplement = Integer.valueOf(getOnesComplement(secondNum)); StringBuilder output = new StringBuilder(); int carry = 0; int temp; while (firstNum != 0 || onesComplement != 0) { temp = (firstNum % 10 + onesComplement % 10 + carry) % 2; output.append(temp); carry = (firstNum % 10 + onesComplement % 10 + carry) / 2; firstNum = firstNum / 10; onesComplement = onesComplement / 10; } String additionOfFirstNumAndOnesComplement = output.reverse().toString(); if (carry == 1) { return addBinaryNumber(Integer.valueOf(additionOfFirstNumAndOnesComplement), carry); } else { return getOnesComplement(Integer.valueOf(additionOfFirstNumAndOnesComplement)); } }

5. Kesimpulan

Pada artikel ini, kita belajar bagaimana mengubah bilangan biner menjadi bilangan desimal dan sebaliknya. Kemudian, kami melakukan operasi aritmatika seperti penambahan dan pengurangan pada bilangan biner.

Kode lengkap yang digunakan dalam artikel ini tersedia di GitHub.