# Umrechung Binär in Dezimal und Hexadezimal



## newjavauser (9. Nov 2010)

Hallo miteinander,

ich hab hier schon ein paar Beiträge zu diesem Thema gelesen. Leider hat nichts zu meinem Problem gepasst. Also dacht ich mir, ich bin einmal so dreisst und öffne einfach ein neues thema. Sorry schonmal!

Ich habe die glorreiche Aufgabe eine Umrechnung von Binär in Dezimal und Hexadezimal in Java zu schreiben. Nach etlichen Stunden des Suchens bei "google ist deine Freund" hab ich dann auch ein halb funktionsfähiges Programm fertiggestellt. Jetzt bin ich mit meinem Latein am Ende und hoffe auf Eure Hilfe...


```
class Binaer2Dezimal2Hexa {
      public static void main(String[] args) {
             String binaer = args[0];
             long dezimal = Long.parseLong(binaer,2);
             String hexadezimal = Long.toHexString(dezimal);

             System.out.println("Binär: " + binaer);
             System.out.println("Dezimal: " + dezimal);
             System.out.println("Hexadezimal: " + hexadezimal);
                                              }
}
```

Kurze Erläuterung:  Die positiven Ergebnisse sind ganz toll nur sobald ich mit 1 (ganz links, also -) beginne spuckt er irgendein Quark aus. Wo liegt mein Fehler?
Wir dürfen eig. kein String benutzen, aber ich hab 0 Ahnung wie ichs ohne hinbekommen soll! 

Vielen Dank im voraus

Gruß
Benny


----------



## Michael... (9. Nov 2010)

newjavauser hat gesagt.:


> Wir dürfen eig. kein String benutzen, aber ich hab 0 Ahnung wie ichs ohne hinbekommen soll!


Und wie soll dann die Darstellung der Zahlen erfolgen?
Wenn das eine Aufgabe ist, dürft Ihr sicherlich auch nicht solche Methoden wie parse... toHex... verwenden und sollt die Umrechnung selbst vor nehmen:
z.B. 101 binär ==>  1*2^2 + 0*2^1 + 1*2^0 dezimal


----------



## newjavauser (9. Nov 2010)

parse hatte wir schon. tohex/string  nicht. Er meinte String wäre nicht erlaubt. 

Aber darf die Eingabe via Konsole keine Leerzeichen enthalten. Mein Problem beim rechnerischen Lösen ist einfach, dass ich nicht weiss wie ich die einzelnen 0 und 1en seperat ansprechen kann. 

Aufgabe besteht aus einer 32 bit Übung und mein erstes Gedanke war einfach 32 Variablen zu Vergeben. Geht das aber leider mit meinem Kenntnisstand nicht, da für mich 10101 eine Variable ist und ich nicht weiss wie ich sie aufbreche...

langer Rede kurzer Sinn.

Findest du einen Fehler warum die Negativen nicht negativ sind?

Gruß


----------



## Michael... (9. Nov 2010)

Beziehst Du Dich auf das Zweierkomplement? Das wird zwar intern bei der Verwaltung der Zahle verwendet, die parse... Methoden kennen das aber nicht. Wenn Du mit den Methoden eine negative Zahl parsen willst musst Du ein Minus davorschreiben.
Übringens ist die Variable binaer ein String. Soviel zur Nichtverwendung von String ;-)


----------



## newjavauser (9. Nov 2010)

Für die Umrechung von Binär auf Dezimal bezieh ich mich aufs 2er....  

Aber die zu Prüfenden "Werte" sind 

1. positiv:  0111 1111 1111 1111 1111 1111 1111 1111 entspricht 2147483647 bzw. 7F FF FF FF

funktioniert.


Aber bei

2. negativ: 1000 0000 0000 0000 0000 0000 0000 0000 entspricht -2147483648 bzw. 80 00 00 00 

funktionierts nicht, da dort das minus fehlt. wobei die 1 doch dem Minus entspricht oder hab ich da nen Denkfehler drinnen?

Gruß


----------



## Michael... (9. Nov 2010)

newjavauser hat gesagt.:


> funktionierts nicht, da dort das minus fehlt. wobei die 1 doch dem Minus entspricht oder hab ich da nen Denkfehler drinnen?


Habe ich ja vorhin schon geschrieben: Diese parse.... Methoden kennen die Darstellung mit dem Zweierkomplement nicht.
Sowas muss man selbst implementieren.


----------



## newjavauser (9. Nov 2010)

Danke schon einmal für deine Hilfestellung.


Jetzt hab ichs verstanden was meine falsche Darstellung angeht.

Wie kann ich denn das Problem lösen? Hast du da einen Vorschlag/Denkanstoß für mich? 


Gruß


----------



## Michael... (9. Nov 2010)

Da ist nur die Problematik mit "keinen String verwenden"
Ansonsten hätte ich mal auf die String Methoden String#charAt(int) oder String#toCharArray() verwiesen, um einen String binaer = "101" in einzelne Zeichen zu zerlegen.


----------

