Algorithmus zum umwandeln einer zahl in 8bit kodierung.

JackintheBox

Mitglied
Hi :)

Also, ich hab für die Uni ne Hausaufgabe bei der ich in nem Programm unteranderem für eine ganze Zahl die Kodierung im 8Bit 2er Kompliment ausgeben muss. Da der vorderste Bit eh nur das Vorzeichen angibt, lass ich den gerade mal außenvor.
Zur Info: Ich darf dazu im Prinzip nur Schleifen verwenden.
Java:
 for(zaehler = 1; zaehler <= 140; zaehler++){

      if(e % 2 == 0) y = 0;
                    else y = 1;
      e = e / 2;

      if(zaehler == bit){
        IO.print(y);
        e = exponent;
        bit = bit + (bit - 1);
      }

    }
Der Sinn an der ganzen Sache soll folgender sein:
Das erste if testet, ob ich an der Stelle an der ich gerade bin ne 0 oder ne 1 brauche und speichert das erstmal in y. Danach geh ich mit e / 2 an die nächste Stelle.
Das zweite if testet jetzt, ob ich überhaupt an der richtigen Stelle bin um das y auszugeben, wenn dem so ist soll genau das passieren. Das bit ist mit 7 initialisiert. Danach soll das e wieder auf seinen Urpsrungswert vor der schleife zurück gesetzt werden (der Wert von exponent) und das bit auf 13 erhöht werden, weil ich die obere Schleife jetzt 6mal durchlaufen muss um an die 6te Stelle zu kommen. Das ganze ToHuWaBoHu natürlich nur, weil ich sonst Bits in der falschen Reinfolge ausgegeben bekomme.
Problem ist dann: ich bekomme 6 0en. Egal was ich tue. Und da blockierts grad bei mir :(

Hat jmd ne Idee wie ich das Problem anders lösen kann oder ich den Code von oben korrigieren muss?

So, ziemlich lang für nen ersten Post, ich hoff das ist in Ordnung so :)
In jedem Fall schonmal Danke! für die Mühe :applaus:

LG
 

Der Müde Joe

Top Contributor
>weil ich sonst Bits in der falschen Reinfolge ausgegeben bekomme.

Man kann auch von hinten her beginnen...
Code:
for(int i = MAX ; i > 0; i--)

Den Rest hab ich jetzt nicht so ganz verstanden (das mit 13 7 und so.. ist auch noch etwas früh)...

mal als Bsp... (ich hoff es stimmt..sind aber mit 32 Bit...)
Java:
public static String toBinary(int b) {
	char[] binary = new char[32];
	// +/-
	if (b < 0) {
		binary[0] = '1';
	} else {
		binary[0] = '0';
	}
	for (int i = 31; i > 0; i--) {
		if ((b & 0x1) == 0) {
			binary[i] = '0';
		} else {
			binary[i] = '1';
		}
		// b/2
		b = b >> 1;
	}
	return new String(binary);
}
 

energy47

Mitglied
wie were es mit einer logischen und verknüpfung.. wo man einfach die integer zahl, bit für bit checkt ob es eine 0 oder 1 ist durch vergleich.. um dann die richtige bit folge zu haben lässt man die schleife rückwerts laufen zb sowas:
Java:
public static void toBinary(int x) {
		
		//log(x)/log(2) stellt die benötigte bit anzahl deiner zahl fest
		//uns speichert das in variable "bit"		
		byte bit = (byte)(Math.log(x)/Math.log(2));
		
		for(;bit >= 0;bit --) {  			//damit man die richtige reinfolge
											//hat, lässt man die schleife
			if( (x & (1<<bit)) > 0)			//rückwerts laufen und checkt so die zahl
				System.out.print("1");		//von links nach rechts durch
			else
				System.out.print("0");
		}
		
	}

für zweierkomplement muss das natürlich noch erweitert werden..
 

JackintheBox

Mitglied
hm.
das problem ist, das ich offiziell aus der vorlesung im prinzip nur die datentypen und schleifen kenne und auch nur das benutzen soll. dazu halt die IO befehle (komische algo tools, einlese ausgebe befehle).

die 7, 13 usw. soll heißen, dass wenn ich den ersten bit (den 7ten) ausgegeben hab, die schleife ab da ja wieder 6x laufen muss um den 6ten bit zu bekommen, also +6 = 13. wenn ich da in der 2ten if klausel den zaehler zurücksetze wird die schleife endlos, darum muss ich die bit variable so anpassen , dass ich immer an der richtigen stelle den wert rausfische.
das ist was ich mir dabei gedacht hab :/.

was hat das mit der char variablen und dem binary da oben auf sich? bin anfänger und lern java grad in der vorlesung. kann damit also grade nicht soviel anfange :(

trotzdem schonma danke ^^
 

Der Müde Joe

Top Contributor
>dass wenn ich den ersten bit (den 7ten) ausgegeben hab,

Das versteh ich nicht, den ersten = siebten oder ??

>6x laufen muss um den 6ten bit zu bekommen, also +6 = 13

Jetzt wirds etwas misteriös?

Erklär doch mal ganz einfach was du möchtest. Ich verstehe im Moment: Ich will eine Zahl im binär Format.
Oder in Psydo:
10 = 1010

1010 --> modulo2 = 0
1010 / 2
101 --> modulo2 = 1
101 / 2
10 -----> modulo2 = 0
10 / 2
1 ------> modulo2 = 1
 

JackintheBox

Mitglied
richtig soweit. kann auch sein das der gedanke nicht ganz richtig ist.

was ich gedacht habe ist ungefähr:

-der erste bit ist das vorzeichen, ich hab also 7 bit für die kodierung über. fall die zahl negativ ist geb ich einfach als erstes ne
1 aus und addiere dann 128 zu dem wert. da 10000000 ja -128 und 00000000 0. falls positiv geb ich einfach ne 0 aus und mach weiter.
-so wie du das schon aufgeschrieben hast rechne ich die mids mit % 2 und dann durch /2 ja so aus, dass ich sie am ende falschraum herausbekomme.
-wenn ich jetzt mit der ausgabe der ersten zahl solange warte bis ich die schleife 7x durchlaufen habe, dann habe ich den bit der an die erste stelle gehört.
-wenn ich jetzt die die zahl wieder so zurücksetze wie sie vor der schleife war und die schleife jetzt 6x durchlaufe, habe ich den bit der an die 2te stelle gehört.
-jetzt setz ich das e wieder zurück auf den ausgangswert und durchlaufe die schleife 5x und habe dann die 1 oder 0 an der 5ten stelle.

usw.
die variable bit ist dann also die stelle die ich aktuell möchte. da der zaehler aber immer weiter läuft muss ich das dann immer von dem zuletzt aktuellen "bit" aus sehen.
für bit = 7 will ich also die ausgabe nach 7x durchlaufen der schleife, was der ersten stelle in der kodierung nach der vorzeichenkodierung entspricht.
dann will ich nach zurücksetzten des "e"s nochmal 6x durch die schleife, also insgesamt 7+6 mal.
damit müsst ich doch erreichen, dass mein e 6x durchgenudelt wird und am ende ein y=0 gespeichert und dann ausgegeben wird.

so ungefähr hab ich mir das gedacht. ist irgendwie relativ kompliziert, aber ich hab halt kein großes sammelsurium an befehlen zur auswahl :(

vllt. ist das jetzt etwas klarer
 

werkuh

Mitglied
ich vermute mal du studierst auch in osnabrück...

ich häng am selben problem und versuchs mal detailliert darzustellen :)

wir haben von der uni die äußerst nutzlosen AlgoTools bereitgestellt bekommen und sollen momentan sämtliche aufgaben ohne arrays und ohne die klassenbibliothek von java lösen

die komplette aufgabenstellung sieht so aus, dass wir eine gleitkommazahl einlesen sollen und diese dann in binärdarstellung nach dem schema [vorzeichen exponent mantisse] ausgeben sollen.

die mantisse zu berechnen ist dabei ja verhältnismäßig einfach, das vorzeichen klärt sich ja auch nach der eingabe. das problem ist jedoch, den exponenten ins zweierkomplement zu codieren, da das ja ohne arrays n bisschen knifflig ist, da man für jedes der 8 exponentenbits eine eigene variable bräuche (hier wäre ein array total hilfreich). einen positiven exponenten könnte man ja auch einfach via Integer.toBinaryString() ausgeben, bei negativen exponenten kommt dabei allerdings nur unsinn raus. zusätzlich schmeißt Integer.toBinaryString() den exponenten auf 23 bits aus, man braucht allerdings nur 8 (mal ganz davon ab, dass wir das ding nicht benutzen sollen). in meinen augen ist die aufgabe reine schikane, aber mann kann ja nichts dagegen tun ^^

also das eigentliche problem ist es ne integer auf 8bit 2erkomplement zu bekommen, ohne dabei die klassenbibliothek oder arrays zu benutzen, dadran bin ich auch grad am verzweifeln :/
 

JackintheBox

Mitglied
allerdings :)

falls du die zündende idee hast, oder sonst den exponenten vernünftig ausgegeben bekommst, sag bescheid.

das wir überprüfen sollen, an welcher stelle wir grade sind und dann abhängig davon die 0 bzw 1 ausgeben sollen oder nicht, war ein tipp von nem übungsleiter.
der zweite tipp war nen anderen algorithmus zur erstellung der binär darstellung zu verwenden, davon ausgehen das die stellen ja auch als 2^1 2^2 2^3 usw. gesehen werden können. vllt find ich mit dem ansatz was.
 

JackintheBox

Mitglied
Okay, hab ne Lösung.
Nicht besonders schön, ziemlich lang, tut aber was es soll:
Java:
public class Achtbit {

  public static void main(String[] argv) {

      int k = IO.readInt("Bitte ein k ");

      if(k >= 64){
        IO.print("1");
        k = k - 64;
      }
      else IO.print("0");
      if(k >= 32){
        IO.print("1");
        k = k - 32;
      }
      else IO.print("0");
      if(k >= 16){
        IO.print("1");
        k = k - 16;
      }
      else IO.print("0");
      if(k >= 8){
        IO.print("1");
        k = k - 8;
      }
      else IO.print("0");
      if(k >= 4){
        IO.print("1");
        k = k - 4;
      }
      else IO.print("0");
      if(k >= 2){
        IO.print("1");
        k = k - 2;
      }
      else IO.print("0");
      if(k >= 1){
        IO.print("1");
      }
      else IO.print("0");
  }
}

dazu noch das vorzeichen und es sollte funktionieren. naja. was anderes fällt mir auch nicht mehr ein.
 

werkuh

Mitglied
das geht auch einfacher, habs auch gerade geknackt, nachdem ich auf anraten mal ein paar zahlen per hand umcodiert hab.

du musst wenn du eine negative zahl codierst das ganze einfach in nen string schreiben, die neuen zahlen vorne in den string setzen und damit brauchst du es nicht mehr umdrehen, sondern kriegste die ausgabe richtigrum.

wenn du nen negativen exponenten kodieren willst, musst du den betrag bilden (vorzeichen umkehren), ein addieren und dann einfach 0 und 1 vertauschen und dann wieder in nen string schreiben wie oben.

klingt kompliziert, ist aber reltativ einfach :D
 

werkuh

Mitglied
soderle, ich habs auch hinbekommen... in schleifen :)

Java:
    if(exponent >= 0) {

      for(int i = 1; i <= 8; i++) {

        if(exponent % 2 == 0)                                                   // binäre Ausgabe des Exponenten
          expDual = "0" + expDual;                                              // in umgekehrter Reihenfolge
        else                                                                    // (Elemente vorne in den String schreiben)
          expDual = "1" + expDual;

        exponent /= 2;
      }
    }
    else {
                                                                                // bei negativem Exponenten:
      exponent = - exponent + 1;                                                // umkehren und 1 addieren
      for(int i = 1; i <= 8; i++) {                                             // und beim umrechnen in Dual
        if(exponent % 2 == 0)                                                   // 0 und 1 vertauschen, entspricht
          expDual = "1" + expDual;                                              // - exponent + 256 -> codiert
        else                                                                    // = codierung.
          expDual = "0" + expDual;
          
          exponent /= 2;
      }
    }

    for(int i = 1; i <= 23; i++) {                                              // Mantisse codieren

      redmantisse *= 2;

       if(redmantisse >= 1) {
         redmantisse -= 1;
         mantDual = mantDual + "1";
       }
       else
         mantDual = mantDual + "0";
         
    }


schön ist was anderes.... aber wenigstens funzt es ^^
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
K Algorithmus entwickeln Java Basics - Anfänger-Themen 1
laxla123 Eigenschaften eines Algorithmus (determiniert vs.. deterministisch) Java Basics - Anfänger-Themen 2
C Gewinnspiel erstellen mit Algorithmus Java Basics - Anfänger-Themen 3
C negamax-Algorithmus für Tic-Tac-Toe spielt manchmal falsch Java Basics - Anfänger-Themen 10
H Minimax Algorithmus in Tic Tac Toe Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus für Vier gewinnt Java Basics - Anfänger-Themen 11
ohneInformatik; Trockentest Algorithmus, mathematischen Zusammenhang angeben Java Basics - Anfänger-Themen 3
M Minimax-Algorithmus Java Basics - Anfänger-Themen 17
mervanpolat Binary Search Algorithmus ausführen Java Basics - Anfänger-Themen 1
J Rekursiver Algorithmus Java Basics - Anfänger-Themen 9
M monte carlo Algorithmus für 4 gewinnt Java Basics - Anfänger-Themen 12
izoards Sortier Algorithmus für Bounding Box Elememte Links nach Rechts und von Oben nach Unten Java Basics - Anfänger-Themen 33
S Algorithmus entwicklen, der zu einem gegebenen Datum die Jahreszeit ermittelt Java Basics - Anfänger-Themen 13
rosima26 Merge-Algorithmus Java Basics - Anfänger-Themen 53
C Ein Algorithmus soll schneller werden Java Basics - Anfänger-Themen 24
D Dijkstra Algorithmus Hilfe!! Java Basics - Anfänger-Themen 9
U Den Kuchen aufteilen - aber wie? (Rebalancing-Algorithmus) Java Basics - Anfänger-Themen 14
s_1895 Pseudocode Naiver Algorithmus Java Basics - Anfänger-Themen 17
H String verschlüsseln - eigener Algorithmus Java Basics - Anfänger-Themen 104
T Algorithmus für Index mit min-Wert Java Basics - Anfänger-Themen 2
Düsseldorf2002 Testen meines Algorithmus Java Basics - Anfänger-Themen 1
D Primzahlen Rechner nach Eratostenes von Kyrene Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Frage zum Euklidischen Algorithmus Java Basics - Anfänger-Themen 11
S Algorithmus java searchAll IKey Java Basics - Anfänger-Themen 4
S Algorithmus Datensätze einfügen wenn... Java Basics - Anfänger-Themen 26
KogoroMori21 MergeSort Algorithmus Java Basics - Anfänger-Themen 2
KogoroMori21 Textdatei einlesen im Array (Selection Sort Algorithmus) Java Basics - Anfänger-Themen 3
fendix Compiler-Fehler Algorithmus zur Bestimmung von Primzahlen Java Basics - Anfänger-Themen 7
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
G Algorithmus Graphen Java Basics - Anfänger-Themen 10
D Input/Output fehlerhafter Algorithmus zum Ersetzen von Array-Werten nach logischem Schema Java Basics - Anfänger-Themen 1
N Selection Algorithmus: Methode wird nicht erkannt (BlueJ) Java Basics - Anfänger-Themen 3
U Meinung zum Dijkstra Algorithmus Java Basics - Anfänger-Themen 6
U Dijkstra Algorithmus Laufzeit Java Basics - Anfänger-Themen 3
L Math.exp also eigenen Algorithmus Java Basics - Anfänger-Themen 2
Kirby.exe Algorithmus entwickeln Java Basics - Anfänger-Themen 37
M Algorithmus Max-Heap? Java Basics - Anfänger-Themen 3
I Labyrinth auf der Basis eines rekursiven Algorithmus Java Basics - Anfänger-Themen 27
CptK Best Practice Algorithmus nach jedem Schritt zum Visualisieren pausieren Java Basics - Anfänger-Themen 3
A Algorithmus effizienter machen Java Basics - Anfänger-Themen 1
V Algorithmus zur fortlaufenden Berechnung des duechscjnt Java Basics - Anfänger-Themen 1
M Dijkstra Algorithmus in Graphen auf mehrere verschiedene Knoten anwenden lassen Java Basics - Anfänger-Themen 11
O Labyrinth Algorithmus Java Basics - Anfänger-Themen 3
G Quicksort Algorithmus Java Basics - Anfänger-Themen 12
S Binäre-Suche Algorithmus Java Basics - Anfänger-Themen 1
D Algorithmus in Pseudocode mit log2(n) Operationen erstellen Java Basics - Anfänger-Themen 3
C Laufzeit eines Sortier-Algorithmus ermitteln Java Basics - Anfänger-Themen 4
H aufgabe java luhn algorithmus Java Basics - Anfänger-Themen 10
A Datenstruktur für Savings Algorithmus und Planung von kleinen Programmierprojekten Java Basics - Anfänger-Themen 1
J Algorithmus für eine Reihe implementieren Java Basics - Anfänger-Themen 2
S Dijkstra Algorithmus funktioniert nicht Java Basics - Anfänger-Themen 4
N Denksportaufgabe durch Algorithmus lösen Java Basics - Anfänger-Themen 2
S Problem mit einem rekursivem FloodFill Algorithmus Java Basics - Anfänger-Themen 62
B Algorithmus Square und Multiply Java Basics - Anfänger-Themen 3
J Algorithmus - Strings auf eigene Reihenfolge miteinander vergleichen Java Basics - Anfänger-Themen 4
D Frage Boyer-Moore Algorithmus Java Basics - Anfänger-Themen 7
M Komplexität Algorithmus Java Basics - Anfänger-Themen 8
H Zeichen im algorithmus Java Basics - Anfänger-Themen 4
B Code Verständnisfragen - FLoyd Warshall Algorithmus Java Basics - Anfänger-Themen 1
B Algorithmus zum entmischen einer Zahlenfolge Java Basics - Anfänger-Themen 15
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
T Algorithmus zur Überprüfung eines binären Suchbaums Java Basics - Anfänger-Themen 2
K Best Practice Algorithmus für Berechnung von Zahlenreihenfolge Java Basics - Anfänger-Themen 12
M Simpler Algorithmus läuft extrem langsam. Java Basics - Anfänger-Themen 3
K Erste Schritte Brute Force Algorithmus Java Basics - Anfänger-Themen 2
L Frage zu BubbleSort Algorithmus Java Basics - Anfänger-Themen 2
B gibt es ein Stundenplan-Algorithmus? Java Basics - Anfänger-Themen 11
O Algorithmus-Problem Java Basics - Anfänger-Themen 5
P Euklidischer Algorithmus Java Basics - Anfänger-Themen 9
L Greates Commong Dividend - euklidischer Algorithmus, modulos not positive Java Basics - Anfänger-Themen 5
J Euklidischer Algorithmus Java Basics - Anfänger-Themen 1
S Quicksort Algorithmus Java Basics - Anfänger-Themen 2
S GraphNode --- Dijkstra Algorithmus : NullPointerException Java Basics - Anfänger-Themen 1
B Rekursive Algorithmus schreiben Java Basics - Anfänger-Themen 8
V Algorithmus in einer Methode ausführen Java Basics - Anfänger-Themen 3
M Implementierung des Knuth-Morris-Pratt-Algorithmus Java Basics - Anfänger-Themen 0
M Dijkstras Algorithmus Java Basics - Anfänger-Themen 5
S Zusammenhang Datenstruktur/Algorithmus Java Basics - Anfänger-Themen 1
M Simulation - Algorithmus Java Basics - Anfänger-Themen 3
F Erste Schritte Hilfe beim Algorithmus finden Java Basics - Anfänger-Themen 8
D Algorithmus für Punkte auf einem Kreis Java Basics - Anfänger-Themen 0
D Algorithmus zu gegebener Laufzeit implementieren Java Basics - Anfänger-Themen 1
B Doppelte Werte aus Array entfernen ohne Import - Algorithmus Java Basics - Anfänger-Themen 5
C Ideen für einen Algorithmus Java Basics - Anfänger-Themen 1
F Best Practice Algorithmus optimieren - Binaeruhr Java Basics - Anfänger-Themen 2
S Euklid Algorithmus zur Berechnung des GGTs Java Basics - Anfänger-Themen 2
L Welcher Algorithmus ist das ? Java Basics - Anfänger-Themen 9
J Rekursiver Horner-Schema-Algorithmus - Verstehe ich ihn richtig? Java Basics - Anfänger-Themen 2
O Java Zufalls-Verteil-Algorithmus Java Basics - Anfänger-Themen 3
P ganz simpler algorithmus Java Basics - Anfänger-Themen 3
C Sortieren ohne Algorithmus Java Basics - Anfänger-Themen 8
J Algorithmus: Grad von floating zu Grad/Minute/Sekunde Java Basics - Anfänger-Themen 3
A Text Verschriebung/Algorithmus(?) Java Basics - Anfänger-Themen 8
R Rekursionsformel für Laufzeit von Algorithmus Java Basics - Anfänger-Themen 3
E Algorithmus für kart. Produkt: als int [] Feld repräsentiert Java Basics - Anfänger-Themen 10
U Peterson Algorithmus Java Basics - Anfänger-Themen 13
algebraiker Collections Bräuchte Hilfe bei dem Algorithmus - LinkedHashMap Java Basics - Anfänger-Themen 2
S A* Path Algorithmus in Java schon vorhanden Java Basics - Anfänger-Themen 3
S Bubble Sort Algorithmus Java Basics - Anfänger-Themen 3
N Unerklärlich: Rekursiver Algorithmus gibt falschen Datentyp zurück... Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben