Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

Zahlen vom Typ Long von Dezimal zu Binär umwandeln (mit nicht-programmierbarem Taschenrechner)
Inderrupt
myCSharp.de - Member



Dabei seit:
Beiträge: 24

Themenstarter:

Zahlen vom Typ Long von Dezimal zu Binär umwandeln (mit nicht-programmierbarem Taschenrechner)

beantworten | zitieren | melden

Hallo,

Wir müssen zt. sehr hohe Zahlen vom Typ Long von Dezimal zu Binär umwandeln. Dabei dürfen wir nur einen nicht programmierbaren Taschenrechner benutzen, der nur Dezimalsysteme kennt.

Da die Divison durch 2 zu aufwendig ist und ich den Rest bei sehr großen Zahlen gar nicht mehr erkenne, wollte ich das per 2er Potenzen lösen.

Also höchste Zahl, die in die umzuwandelnde Zahl X reinpasst wird an der Stelle die 1 gesetzt und von der Zahl x abgezogen.

Jetzt habe ich nach einer solchen Tabelle gesucht, aber komischerweise keine gefunden. Letztendlich ist es ja nur eine 2er Potenzreihfe bis 2^63.

Gibt es denn dazu keine im Intenet?

Zur Not bleibt natürlich noch Excel aber ich hoffe, dass es eine übersichtlichere Tabelle schon gibt.
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Inderrupt am .
private Nachricht | Beiträge des Benutzers
T-Virus
myCSharp.de - Member



Dabei seit:
Beiträge: 1920
Herkunft: Nordhausen, Nörten-Hardenberg

beantworten | zitieren | melden

Iregendwie klingt deine Aussage als wolltest du dir einen Spicker für eine Prüfung o.ä. basteln :/
Deshalb würde ich dir nicht helfen wollen.

Wenn du so oder so Excel verwenden willst, dann kannst du das gerne tun.
Warum auch auf eine Rückmeldung warten wenn du in der Zeit auch schon die Tabelle fertig haben könntest?
Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Inderrupt,

du brauchst keine Potenzreihe und wenn doch, dann kannst du die mit deinem Taschenrechner durch wiederholte Multiplikation mit 2 leicht selbst erstellen.

Allerdings ist die wiederholte Division durch zwei genau das richtige. Wenn ein Rest bleibt, ist (von hinten nach vorne) die aktuelle binäre Ziffer eine Eins sonst eine Null. Natürlich musst du den Rest vor der nächsten Division entfernen. Der Rest kann ja nur 0,5 sein. Das ziehst du einfach von der aktuellen Zahl ab.

26 / 2 = 13 (Ziffer 0)
13 / 2 = 6,5 (Ziffer 1)
6 / 2 = 3 (Ziffer 0)
3 / 2 = 1,5 (Ziffer 1)
1 / 2 = 0,5 (Ziffer 1)

Also im Ergebnis 11010.

herbivore
private Nachricht | Beiträge des Benutzers
Inderrupt
myCSharp.de - Member



Dabei seit:
Beiträge: 24

Themenstarter:

beantworten | zitieren | melden

Hallo, danke für die Antworten.

Es ist in der tat ein Spicker, der aber volkommen erlaubt ist in der Klausur ;)
Danke für die Erklärung des Verfahren, allerdings ist mir das bekannt, es klappt bei mir nur nicht bei einer Zahl wie:

998877665544332211 da sie zu groß ist und ich im Taschenrechner keinen Rest mehr erkenne. Ich denke, da bleibt nur noch der Weg mit der 2er Potenztabelle.
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Inderrupt,

wenn die Zahl zu groß ist, um sie im Taschenrechner exakt darzustellen, wenn also 998877665544332211 z.B. als 9,988776655E17 dargestellt wird, nützt dir auch die Potenztabelle nichts. Zwar wird die Subtraktion ein Ergebnis liefern, aber aber eben kein exaktes, weil ja schon bei der Ausgangszahl (und vermutlich auch beim Subtrahend) die hinteren Stellen unwiederbringlich abgeschnitten sind. Vermutlich werden in der Klausur aber ohnehin nur Zahlen auftauchen, die auf normalen Taschenrechnern exakt dargestellt werden können und bei denen man auch den Rest erkennen kann. Insofern kannst du dann das Divisionsverfahren verwenden.

herbivore
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1407

beantworten | zitieren | melden

Da wirst du Wohl auf "traditionelle"Möglichkeiten Zurückgreifen müssen. mit Stift und papier ist das doch auch nicht sonderlich aufwendig.

LG pdelvo
private Nachricht | Beiträge des Benutzers
Inderrupt
myCSharp.de - Member



Dabei seit:
Beiträge: 24

Themenstarter:

beantworten | zitieren | melden

Die Zahl 998877665544332211 stammt aus einer Altklausur ;)
Wäre es dann nicht geschickter per Hand die Zahl zunächst in Hexadezimal umzurechnen? Das sollte doch deutlich schneller gehen und ich bräuchte nur eine Tabelle die bis 16^15 geht.

Was meint ihr?

// EDT: Sorry, das kann ja gar nicht funktionieren ^^
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Inderrupt am .
private Nachricht | Beiträge des Benutzers
Abt
myCSharp.de - Team

Avatar #avatar-4119.png


Dabei seit:
Beiträge: 16234

beantworten | zitieren | melden

Jeder wie ers mag.
Ich verwend - wenn schriftlich notwendig - herbivores Variante.
So schwer ist das im Kopf ja auch nicht.
- performance is a feature -

Microsoft MVP - @Website - @blog - @AzureStuttgart - github.com/BenjaminAbt
private Nachricht | Beiträge des Benutzers
pdelvo
myCSharp.de - Member

Avatar #avatar-3354.png


Dabei seit:
Beiträge: 1407

beantworten | zitieren | melden

Ich persönlich finde es einfacher immer wieder durch 2 zu teilen anstatt durch 16. Klar hast du dann mehr Schritte, aber ich zumindest komme damit besser klar. Und wenn du die Zahl per Hand soweit runtergebrochen hast so das sie in den Taschenrechner passt kannst du ja damit weitermachen. Ist ja eigentlich schon nett dass ihr überhaupt einen benutzen dürft ;)
private Nachricht | Beiträge des Benutzers
Inderrupt
myCSharp.de - Member



Dabei seit:
Beiträge: 24

Themenstarter:

beantworten | zitieren | melden

Ja genau, denke schriftliche divison durch 2, bis die Zahl klein genug für den Taschenrechner ist, wird die beste Methode sein. Immerhin hat man 15 Minuten für die Aufgabe ;)

Nach kurzem Praxistest bin ich doch anderer Meinung :D

Ich werde es mit ner 2er Potenzreihe machen und die Subtraktion schriftlich, bis es dann per Taschenrechner geht
Dieser Beitrag wurde 1 mal editiert, zum letzten Mal von Inderrupt am .
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Inderrupt,

statt durch 2 zu teilen kannst du auch mit 5 multiplizieren, wenn dir das leichter fällt, und anschließend die letzte Stelle (die nur 5 oder 0 sein kann, entspricht Rest oder kein Rest, entspricht binärer 1 oder binärer 0) weglassen.

herbivore
private Nachricht | Beiträge des Benutzers
Inderrupt
myCSharp.de - Member



Dabei seit:
Beiträge: 24

Themenstarter:

beantworten | zitieren | melden

Vielleicht eine dumme Frage, aber wann endet dann die Rechnung, wenn ich eine Zahl x ständig mit 5 multipliziere?
private Nachricht | Beiträge des Benutzers
herbivore
myCSharp.de - Experte

Avatar #avatar-2627.gif


Dabei seit:
Beiträge: 52329
Herkunft: Berlin

beantworten | zitieren | melden

Hallo Inderrupt,

die Frage ist zumindest unnötig, denn ich habe sie bereits beantwortet, denn ich habe geschrieben, dass man nach jeder Multiplikation die letzte Stelle weg lässt. Letztlich rechnest du also bei jedem Schritt mal 5 durch 10 also letztlich auch durch 2, nur dass es sich für einen Menschen leichter ausrechnen lässt.

herbivore
private Nachricht | Beiträge des Benutzers