Binære tall i Java

1. Introduksjon

Det binære tallsystemet bruker 0s og 1s til å representere tall. Datamaskiner bruker binære tall for å lagre og utføre operasjoner på alle data.

I denne opplæringen lærer vi hvordan vi konverterer binær til desimal og omvendt. Vi vil også utføre tillegg og subtraksjon på dem.

2. Binær bokstavelig

Java 7 introduserte binær bokstavelig. Det forenklet bruk av binært tall.

For å bruke det, må vi foran nummeret 0B eller 0b:

@Test offentlig ugyldig given_binaryLiteral_thenReturnDecimalValue () {byte five = 0b101; assertEquals ((byte) 5, five); kort tre = 0b11; assertEquals ((kort) 3, tre); int ni = 0B1001; assertEquals (9, ni); lang tjueNine = 0B11101; assertEquals (29, twentyNine); int minusThirtySeven = -0B100101; assertEquals (-37, minusThirtySeven); }

3. Konvertering av binært nummer

I denne delen lærer vi hvordan vi konverterer et binært tall til desimalformat og omvendt. Her bruker vi først en innebygd Java-funksjon for konvertering, og deretter skriver vi våre tilpassede metoder for det samme.

3.1. Desimal til et binært tall

Heltall har en funksjon som heter toBinaryString for å konvertere et desimaltall til sin binære streng:

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

Nå kan vi prøve å skrive vår egen logikk for denne konverteringen. Før vi skriver koden, la oss først forstå hvordan du konverterer et desimaltall til et binært tall.

Å konvertere et desimaltall n i sitt binære format, må vi:

  1. Dele opp n av 2, og noterer kvotienten q og resten r
  2. Dele opp q av 2, og legger merke til kvotienten og resten
  3. Gjenta trinn 2 til vi får 0 som kvotient
  4. Sett sammen resten i omvendt rekkefølge

La oss se et eksempel på å konvertere 6 til dets ekvivalente binære format:

  1. Del først 6 med 2: kvotient 3, resten 0
  2. Del deretter 3 med 2: kvotient 1, resten 1
  3. Og til slutt, del 1 med 2: kvotient 0, resten 1
  4. 110

La oss nå implementere ovennevnte algoritme:

public Integer convertDecimalToBinary (Integer decimalNumber) {if (desimalNumber == 0) {return desimalNumber; } StringBuilder binaryNumber = ny StringBuilder (); Heltallkvotient = desimalNummer; mens (kvotient> 0) {int resten = kvotient% 2; binaryNumber.append (resten); kvotient / = 2; } binaryNumber = binaryNumber.reverse (); return Integer.valueOf (binaryNumber.toString ()); }

3.2. Binært til et desimaltall

For å analysere en binær streng, Heltall klasse gir en parseInt funksjon:

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

Her, den parseInt funksjon tar to parametere som inngang:

  1. Binær streng som skal konverteres
  2. Radix eller base av tallsystemet der inngangsstrengen må konverteres

La oss nå prøve å skrive vår egen logikk for å konvertere et binært tall til desimal:

  1. Start med sifferet til høyre
  2. Multipliser hvert siffer med 2 ^ {posisjon} for sifferet - her er posisjonen til høyre siffer null og den øker når vi beveger oss til venstre side
  3. Legg til resultatet av alle multiplikasjonene for å få det endelige desimaltallet

Igjen, la oss se metoden vår i aksjon:

  1. Først 101011 = (1 * 2 ^ 5) + (0 * 2 ^ 4) + (1 * 2 ^ 3) + (0 * 2 ^ 2) + (1 * 2 ^ 1) + (1 * 2 ^ 0 )
  2. Deretter 101011 = (1 * 32) + (0 * 16) + (1 * 8) + (0 * 4) + (1 * 2) + (1 * 1)
  3. Deretter 101011 = 32 + 0 + 8 + 0 + 2 + 1
  4. Og til slutt, 101011 = 43

La oss endelig kode trinnene ovenfor:

public Integer convertBinaryToDecimal (Integer binaryNumber) {Integer desimalNumber = 0; Heltalsbase = 1; mens (binaryNumber> 0) {int lastDigit = binaryNumber% 10; binaryNumber = binaryNumber / 10; desimalNummer + = sisteDigit * base; base = base * 2; } returner desimalNummer; }

4. Aritmetiske operasjoner

I denne delen vil vi konsentrere oss om å utføre de aritmetiske operasjonene på binære tall.

4.1. Addisjon

Akkurat som desimalnummeret begynner vi å legge til tallene fra sifferet lengst til høyre.

Når vi legger til to binære sifre, må vi huske følgende regler:

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

Disse reglene kan implementeres som:

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

4.2. Subtraksjon

Det er mange måter å trekke fra binære tall. I denne delen lærer vi en komplementmetode for å subtrahere.

La oss først forstå hva som er et supplement til et tall.

Ens komplement av et tall er et tall som er oppnådd av negerer hvert siffer i det binære tallet. Det betyr bare å erstatte 1 med 0 og 0 med 1:

public Integer getOnesComplement (Integer num) {StringBuilder onesComplement = new StringBuilder (); mens (num> 0) {int lastDigit = num% 10; hvis (lastDigit == 0) {onesComplement.append (1); } annet {onesComplement.append (0); } num = num / 10; } returner Integer.valueOf (onesComplement.reverse (). toString ()); }

For å trekke fra to binære tall ved å bruke et komplement, må vi:

  1. Beregn ens komplement av subtrahend s
  2. Legge til s og minuend
  3. Hvis en bære blir generert i trinn 2, legg den til til trinn 2 for å få det endelige svaret.
  4. Hvis en bære ikke genereres i trinn 2, er komplementet til trinn 2s resultat det endelige svaret. Men i dette tilfellet er svaret negativt

La oss implementere trinnene ovenfor:

public Integer substractBinaryNumber (Integer firstNum, Integer secondNum) {int onesComplement = Integer.valueOf (getOnesComplement (secondNum)); StringBuilder-utgang = ny StringBuilder (); int bære = 0; int temp; mens (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; } Streng additionOfFirstNumAndOnesComplement = output.reverse (). ToString (); if (carry == 1) {return addBinaryNumber (Integer.valueOf (additionOfFirstNumAndOnesComplement), carry); } annet {return getOnesComplement (Integer.valueOf (additionOfFirstNumAndOnesComplement)); }}

5. Konklusjon

I denne artikkelen lærte vi hvordan vi konverterer binære tall til desimaler og omvendt. Deretter utførte vi aritmetiske operasjoner som tillegg og subtraksjon på binære tall.

Den komplette koden som brukes i denne artikkelen, er tilgjengelig på GitHub.


$config[zx-auto] not found$config[zx-overlay] not found