Datentypen Integer mit führender Null

ocsme

Top Contributor
Hallo zusammen,

ich würde sehr gerne ein kleines Programm schreiben das eine Folge von Bit zahlen umwandelt =) mittels Horner Schema z. B. im 2er Komplement.

Das Problem ist das sobald ich eine führende Null angebe bei einem Integer / Long interpretiert der JAVACompiler die Zahl ja als OktaZahl.
Wie bekomme ich das Problem gelöst? Strings und der gleichen dürfen wir noch nicht benutzen 😀

Hier nur mal der Anfang:
long n = 0111L;
long rest = n % 10;
long erstesBit = n / 10;

leider kommt das raus:
73
3
7
 
ich habe einen gegeben int aus Binärzahlen. Das Programm soll bei 1 Positiv als + machen und bei 0 ein -.
Somit muss ich ja die erste stelle es Int ermitteln und dann vergleichen ist es eine 0 oder eine 1.
Ich versuche die Zahl ja abzuschneiden-siehe oben- doch wie schon gesagt wenn der Int mit 0 anfängt interpretiert er es als Oktazahl und gibt mir somit ein falsches Ergebnis :-(
Weiß da jemand eine Antwort.
Denn mit 0b geht es ja so auch nicht zumindest wüsste ich nicht wie denn die Eingabe müsste dann ja 0b sein wenn man eine Negative Zahl erstellt.

LG
 
Haben die Zahlen immer die selbe Anzahl an Bits?
Nehmen wir folgendes an:
Java:
long x = 0b100101;

Was spricht denn dann dagegen mit Shift-Operationen nach dem MSB zu schauen:
Java:
int msb = (x >> 5) & 1;

Jetzt ist eben die Frage ob deine Zahlen immer die gleiche Länge an Bits haben.. für andere Zahlen müsste die 5 eben durch die Anzahl der Bits - 1 ersetzt werden.
 
ja es sollen immer 32 Bit sein.
Der Programmaufruf bekommt die Bit mit also als Inter.parseInt. Somit ist ja nicht klar was als erstes angegebn wird ob 0 oder 1. Das war / ist mein Problem.
Das würde ich sehr gerne abschneiden und den rest die 31 Bit über Horner - Schema berechnen!
LG
 
Also mit ein bisschen Gefriemel ist es in der Tat möglich..

Du musst mit einer for-Schleife über alle Bits laufen (alle außer das MSB) und dann mit der o.g. Formel shiften.
So kriegst du die einzelnen Bits und kannst mittels des Horner-Schemas die Zahl berechnen.
Ob das MSB gesetzt ist kriegst du dann dementsprechend so raus: int msb = (zahl >> 31) & 1;

Du hast nur ein Problem wenn du eine neg. Zahl hast. Dann musst du die Umwandlung aus dem Zweierkomplement erst wieder rückgängig machen. Das bekommst du aber noch raus 😉
 
Der Programmaufruf bekommt die Bit mit also als Inter.parseInt
Sorry, verstehe auch nicht was du da meinst. Hat sich mal jemand den Beitrag von @Meniskusschaden angesehen ?
Wenn du dem Programm beim Aufruf 01010 mitgibst (in args[] nehme ich an) und es dann mit Integer.parseInt(...) in int parsed dann hast du hinterher 1010 als Zahl. Wo hast du genau dein Problem ? Wie sieht dein Code aus ? Das Problem tritt nur auf wenn du es als Literal im Code stehen hast so wie in deinem Codeschnipsel oben. Aber du sagst ja das wird eingegeben ?!
 
a es sollen immer 32 Bit sein.
Der Programmaufruf bekommt die Bit mit also als Inter.parseInt. Somit ist ja nicht klar was als erstes angegebn wird ob 0 oder 1. Das war / ist mein Problem.
Die Eingabe wäre also ein integer-Wert, der nur aus Nullen und Einsen besteht und daraus soll dann der entsprechende Dezimalwert berechnet werden? In eine integer-Variable passt aber keine 32-stellige Zahl. Oder soll jede Ziffer einzeln eingelesen werden? Außerdem erwartet Integer.parseInt() einen String. Wo kommt der denn her, wenn Strings verboten sind? Vielleicht wäre es besser, die Original-Aufgabenstellung zu posten. Ich glaube, es ist noch nicht wirklich klar, worum es hier geht.
Das würde ich sehr gerne abschneiden und den rest die 31 Bit über Horner - Schema berechnen!
Es geht doch um Zweierkomplement? Dann ist das falsch.
 
oh wie Peinlich das habe ich ja gar nicht ausprobiert.
Ich bin davon ausgegangen das wenn ich ein Nummeral im Programm angebe das das selbe ist wie bei Integer.parseInt :-D

Hier die Aufgabenstellung.
Sie sollen ein Programm zu entwickeln, das Binärzahlen bestehend aus den Ziffern 0
und 1 in Dezimalzahlen bestehend aus den Ziffern 0, 1, ... , 9 und
Hexadezimalzahlen, bestehend aus den Ziffern 0, 1, ... , 9, A, B, C, D, E, F
konvertiert. Die Binärzahlen werden dabei immer mit 32 Bit dargestellt, wobei das
erste Bit das Vorzeichen repräsentiert (Zweierkomplementdarstellung)
 
Jaaaa... da könntest du komplett an der Aufgabenstellung (die übrigens etwas blöd gestellt ist) vorbeigearbeitet haben.
Dass die Binärzahl 32 Bit lang sein soll, spricht dafür, dass du einen String als Eingabe hast und Zeichen für Zeichen auswerten sollst.
Sobald du die Auswertung des Hexadezimalen machst, musst du halt beim ersten Zeichen darauf achten, ob es größer als 7 ist oder nicht (Stichwort: erstes Bit).
 
Aufgabenstellung war nicht genau!
Er wollte nicht mal einen Algorithmus haben sondern man hätte es auch mit printf ausgeben können oder eben so:

Java:
long master = Long.parseLong(args[0],2);

        if (master > Integer.MAX_VALUE)
            master = Integer.MIN_VALUE-(Integer.MAX_VALUE-master)-1;
       
        System.out.println("Die Variable x hat den Wert:" + master);
        System.out.printf("Die Variable x hat den Wert: %X%n",(int) master);
 

Neue Themen


Zurück
Oben