Binære tal i Java

1. Introduktion

Det binære talesystem bruger 0s og 1s til at repræsentere tal. Computere bruger binære tal til at gemme og udføre operationer på alle data.

I denne vejledning lærer vi, hvordan man konverterer binær til decimal og omvendt. Vi udfører også addition og subtraktion på dem.

2. Binær bogstavelig

Java 7 introducerede den binære bogstavelige. Det forenklede brugen af ​​binært tal.

For at bruge det skal vi præfikere tallet med 0B eller 0b:

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

3. Konvertering af binært tal

I dette afsnit lærer vi, hvordan man konverterer et binært tal til dets decimalformat og omvendt. Her bruger vi først en indbygget Java-funktion til konvertering, og derefter skriver vi vores brugerdefinerede metoder til det samme.

3.1. Decimal til et binært tal

Heltal har en funktion navngivet toBinaryString at konvertere et decimaltal til dets binære streng:

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

Nu kan vi prøve at skrive vores egen logik til denne konvertering. Før vi skriver koden, lad os først forstå, hvordan man konverterer et decimaltal til et binært tal.

At konvertere et decimaltal n i dets binære format skal vi:

  1. Dele n ved 2 og bemærker kvotienten q og resten r
  2. Dele q ved 2 og bemærker dens kvotient og resten
  3. Gentag trin 2, indtil vi får 0 som kvotienten
  4. Sammenkæd alle resterende i omvendt rækkefølge

Lad os se et eksempel på konvertering af 6 til dets ækvivalente binære format:

  1. Del først 6 med 2: kvotient 3, resten 0
  2. Dele derefter 3 med 2: kvotient 1, resten 1
  3. Og endelig divider 1 med 2: kvotient 0, resten 1
  4. 110

Lad os nu implementere ovenstående algoritme:

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

3.2. Binær til et decimaltal

For at analysere en binær streng, Heltal klasse giver en parseInt fungere:

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

Her, den parseInt funktion tager to parametre som input:

  1. Binær streng, der skal konverteres
  2. Radix eller base af det nummersystem, hvor inputstreng skal konverteres

Lad os nu prøve at skrive vores egen logik for at konvertere et binært tal til decimal:

  1. Start med cifferet til højre
  2. Multiplicer hvert ciffer med 2 ^ {position} for cifret - her er cifferets højre position nul, og det stiger, når vi bevæger os til venstre side
  3. Tilføj resultatet af alle multiplikationer for at få det endelige decimaltal

Lad os igen se vores metode i aktion:

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

Lad os endelig kode ovenstående trin:

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

4. Aritmetiske operationer

I dette afsnit koncentrerer vi os om at udføre de aritmetiske operationer på binære tal.

4.1. Tilføjelse

Ligesom tilføjelsen af ​​decimaltallet begynder vi at tilføje tallene fra cifferet til højre.

Mens vi tilføjer to binære cifre, skal vi huske følgende regler:

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

Disse regler kan implementeres som:

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

4.2. Subtraktion

Der er mange måder at trække binære tal på. I dette afsnit lærer vi en komplementmetode til at subtrahere.

Lad os først forstå, hvad der er et supplement til et tal.

Enes komplement af et tal er et tal opnået af at negere hvert ciffer i det binære tal. Det betyder bare at 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); } andet {onesComplement.append (0); } num = num / 10; } returner Integer.valueOf (onesComplement.reverse (). toString ()); }

For at foretage subtraktion af to binære tal ved hjælp af ens komplement skal vi:

  1. Beregn ens komplement af subtrahend s
  2. Tilføje s og minuend
  3. Hvis en bære genereres i trin 2, skal du tilføje den bære til trin 2's resultat for at få det endelige svar.
  4. Hvis en bærer ikke genereres i trin 2, er ens komplement til trin 2's resultat det endelige svar. Men i dette tilfælde er svaret negativt

Lad os implementere ovenstående trin:

public Integer substractBinaryNumber (Integer firstNum, Integer secondNum) {int onesComplement = Integer.valueOf (getOnesComplement (secondNum)); StringBuilder output = ny StringBuilder (); int carry = 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; } String additionOfFirstNumAndOnesComplement = output.reverse (). ToString (); if (carry == 1) {return addBinaryNumber (Integer.valueOf (additionOfFirstNumAndOnesComplement), carry); } andet {return getOnesComplement (Integer.valueOf (additionOfFirstNumAndOnesComplement)); }}

5. Konklusion

I denne artikel lærte vi, hvordan man konverterer binære tal til decimaler og omvendt. Derefter udførte vi aritmetiske operationer som addition og subtraktion på binære tal.

Den komplette kode, der bruges i denne artikel, er tilgængelig på GitHub.


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