Hallo!
Ich sitzte nun schon längere Zeit an folgender Aufgabe:
Ich soll folgendes Java-Programm schreiben:
/* Die Klasse PruefeLong beinhaltet das Einlesen einer Long-Zahl und die Überprüfung ob:
- die letzten 3 Bit auf eins gesetzt sind (die Bits rechts)
- die letzten 3 Bit auf 0 gesetzt sind (die Bits rechts)
- die ersten 3 Bit auf 1 gesetzt sind(ohne Verwendung von Bit-Schiebeoperationen) (die Bits links)
- die ersten 3 Bit auf 1 gesetzt sind (mit Verwendung von Bit-Schiebeoperationen) (die Bits links)
- die letzten 3 unterschiedlich gesetzt sind (also 101,oder 001, jedoch nicht 000 oder 111)
*/
Weiterhin kann ich über die Klasse „FormatierteAusgabe“ verfügen. Dabei ist folgender Methodenaufruf rellevant, um mir die Binärdarstellung der eingegebenen Long-zahl anzeigen zu können:
„FormatierteAusgabe.binaerAusgabe(long eingegebenelongzahl,int bitanzahl);“
Die Eingabe von Konsole der Longzahl erfolgt mit:
„Long zahl=TastaturEingabe.readLong(„Ihre Eingabe:\n“);“
Dies funktioniert auch reibungslos.
Aber nun zu den einzelnen Aufgaben, die innerhalb der Klasse PruefeLong gelöst werden müssen.
Zunächst mal: Prüfen, ob die letzten 3 Bits 1 oder 0 sind.
-
Frage: Was sind die letzten 3 bits? Angenommen ich hätte für die Bitanzahl 16 Bit gewählt und gebe als Longzahl z.B. 71 ein.
Das entspricht der formatierten Ausgabe (als Binärzahl) von 0000000001000111.
Meiner Meinung nach sind jetzt die lezten 3 Bits aber „100“, d.h. die links „angehängten“ Nullen sind irrelevant und mit den letzten Bits meint man die von der Wertigkeit höchsten 3 Bits, also die 3 Bits die ganz links von der eigentlichen Zahl stehen. Ist meine Annahme so korrekt? -
Frage: Jetzt kann ich aber nicht über die Binärzahl, die ich durch den Methodenaufruf „FormatierteAusgabe.binaerAusgabe(long eingegebenelongzahl,int bitanzahl);“ erhalte verfügen, weil mir ein Void-Typ geliefert wird. Also muss ich mir Hilfe von Bit-Operatioenn (also &,|,^,~, >>,>>:wink: und einer Maskierung arbeiten. Aber wie stelle ich das jetzt am besten an? Gemäß obiger Bitanzahl würde ich also z.B. die Maskierung, die „111“ beinhaltet (Zahl 7) wählen, und diese dann mit meiner Long-Zahl mittels „&“ vergleichen. Aber wie geht das konkret, denn ich muss ja die Bitanzahl beachten und eben nur die leztzen 3 Bit mittels binärem Und ("&") vergleichen.
Ich bin für jeden Rat dankbar. Ich denke, dass es nicht allzu schwer sein wird. Aber momentan bin ich etwas perplex…
Bielen Dank für Eure Hilfe,
Gruß, Ralf