Binarni brojevi u Javi

1. Uvod

Binarni brojevni sustav koristi 0 i 1 za predstavljanje brojeva. Računala koriste binarne brojeve za pohranu i izvršavanje operacija na bilo kojim podacima.

U ovom uputstvu naučit ćemo kako pretvoriti binarnu u decimalnu i obrnuto. Također ćemo izvršiti zbrajanje i oduzimanje na njima.

2. Binarni doslovni

Java 7 predstavila je binarni literal. Pojednostavio je upotrebu binarnih brojeva.

Da bismo je koristili, moramo predbroj dodati s 0B ili 0b:

@Test javna praznina given_binaryLiteral_thenReturnDecimalValue () {byte five = 0b101; assertEquals ((bajt) 5, pet); kratka tri = 0b11; assertEquals ((kratko) 3, tri); int devet = 0B1001; assertEquals (9, devet); dugi dvadesetNe = 0B11101; assertEquals (29, dvadeset devet); int minusThirtySeven = -0B100101; assertEquals (-37, minusThirtySeven); }

3. Pretvorba binarnog broja

U ovom ćemo odjeljku naučiti kako pretvoriti binarni broj u njegov decimalni format i obrnuto. Ovdje ćemo prvo koristiti ugrađenu Java funkciju za pretvorbu, a zatim ćemo za nju napisati vlastite metode.

3.1. Decimalno na binarni broj

Cijeli broj ima funkciju imenovanu toBinaryString za pretvaranje decimalnog broja u njegov binarni niz:

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

Sada možemo pokušati napisati vlastitu logiku za ovu pretvorbu. Prije pisanja koda, prvo shvatimo kako pretvoriti decimalni broj u binarni.

Za pretvaranje decimalnog broja n u njegov binarni format, moramo:

  1. Podijeliti n sa 2, bilježeći količnik q a ostatak r
  2. Podijeliti q sa 2, bilježeći njegov količnik i ostatak
  3. Ponavljajte korak 2 dok ne dobijemo 0 kao količnik
  4. Spojite obrnutim redoslijedom sve ostatke

Pogledajmo primjer pretvorbe 6 u njegov ekvivalent binarnog formata:

  1. Prvo podijelite 6 s 2: količnik 3, ostatak 0
  2. Zatim podijelite 3 sa 2: količnik 1, ostatak 1
  3. I na kraju, podijelite 1 s 2: količnik 0, ostatak 1
  4. 110

Primijenimo sada gornji algoritam:

javni Integer convertDecimalToBinary (Integer decimalNumber) {if (decimalNumber == 0) {return decimalNumber; } StringBuilder binaryNumber = novi StringBuilder (); Cjelobrojni količnik = decimalNumber; while (količnik> 0) {int ostatak = količnik% 2; binaryNumber.append (ostatak); količnik / = 2; } binarniBroj = binarniBroj.reverse (); vrati Integer.valueOf (binaryNumber.toString ()); }

3.2. Binarni na decimalni broj

Za raščlanjivanje binarnog niza, Cijeli broj razred pruža a raščlaniti funkcija:

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

Evo, raščlaniti funkcija uzima dva parametra kao ulaz:

  1. Binarni niz koji treba pretvoriti
  2. Radiks ili baza brojevnog sustava u kojem se ulazni niz mora pretvoriti

Pokušajmo sada napisati vlastitu logiku za pretvaranje binarnog broja u decimalni:

  1. Počnite od krajnje desne znamenke
  2. Pomnožite svaku znamenku s 2 ^ {položaj} te znamenke - ovdje je krajnji desni položaj nula i on se povećava kako se pomičemo u lijevu stranu
  3. Dodajte rezultat svih množenja da biste dobili konačni decimalni broj

Ponovno, pogledajmo našu metodu na djelu:

  1. Prvo, 101011 = (1 * 2 ^ 5) + (0 * 2 ^ 4) + (1 * 2 ^ 3) + (0 * 2 ^ 2) + (1 * 2 ^ 1) + (1 * 2 ^ 0 )
  2. Dalje, 101011 = (1 * 32) + (0 * 16) + (1 * 8) + (0 * 4) + (1 * 2) + (1 * 1)
  3. Tada je 101011 = 32 + 0 + 8 + 0 + 2 + 1
  4. I na kraju, 101011 = 43

Napokon kodirajmo gornje korake:

javni Integer convertBinaryToDecimal (Integer binaryNumber) {Integer decimalNumber = 0; Cijela baza = 1; while (binarniBroj> 0) {int lastDigit = binarniBroj% 10; binarniBroj = binarniBroj / 10; decimalNumber + = lastDigit * baza; baza = baza * 2; } vrati decimalNumber; }

4. Aritmetičke operacije

U ovom ćemo se dijelu usredotočiti na izvođenje aritmetičkih operacija nad binarnim brojevima.

4.1. Dodatak

Baš kao i zbrajanje decimalnog broja, počinjemo zbrajati brojeve s desne znamenke.

Dok dodajemo dvije binarne znamenke, moramo upamtiti sljedeća pravila:

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

Ta se pravila mogu provesti kao:

javni Integer addBinaryNumber (Integer firstNum, Integer secondNum) {StringBuilder output = new StringBuilder (); int nose = 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 (nose! = 0) {output.append (nose); } return Integer.valueOf (output.reverse (). toString ()); }

4.2. Oduzimanje

Postoji mnogo načina za oduzimanje binarnih brojeva. U ovom ćemo odjeljku naučiti nečiju metodu dopunjavanja za oduzimanje.

Prvo shvatimo što je nečija nadopuna broja.

Nečiji dodatak broju je broj koji je dobio negirajući svaku znamenku binarnog broja. To znači da samo zamijenite 1 s 0 i 0 s 1:

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

Da bismo izvršili oduzimanje dvaju binarnih brojeva pomoću nečijeg komplementa, moramo:

  1. Izračunajte nečiji dopunu oduzimanja s
  2. Dodati s i minuend
  3. Ako se prijenos generira u koraku 2, dodajte to prijenos rezultatu koraka 2 da biste dobili konačni odgovor.
  4. Ako se prijenos ne generira u koraku 2, tada je konačni odgovor nadopuna rezultata koraka 2. Ali u ovom je slučaju odgovor negativan

Provedimo gornje korake:

javni Integer substrateBinaryNumber (Integer firstNum, Integer secondNum) {int onesComplement = Integer.valueOf (getOnesComplement (secondNum)); StringBuilder output = novi StringBuilder (); int nose = 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 addOfFirstNumAndOnesComplement = output.reverse (). ToString (); if (carry == 1) {return addBinaryNumber (Integer.valueOf (addOfFirstNumAndOnesComplement), carry); } else {vratiti getOnesComplement (Integer.valueOf (addOfFirstNumAndOnesComplement)); }}

5. Zaključak

U ovom smo članku naučili kako pretvoriti binarne brojeve u decimalne i obrnuto. Zatim smo izveli aritmetičke operacije poput zbrajanja i oduzimanja binarnih brojeva.

Kompletni kôd korišten u ovom članku dostupan je na GitHubu.