Dezimal nach Binär umwandeln? (war: Binär)



  • Gibt es in C++Builder irgendeine vorgefertigte Funktion zum Umwandeln von Zahlen in Binärzahlen? Ich hab keine Lust mir immer wieder ne eigene zu schreiben(denn die alte lösch ich immer aus versehen) xD

    Edit:
    Bitte aussagekräftige Überschriften wählen. Danke!



  • In der Standard-Lib gibt es die Klasse bitset<>, die sowas beherrscht. (in meinem Magazin-Artikel "Aufbau der STL" habe ich auch ein Beispiel, wie das funktioniert)

    PS: Binär schreibt man übrigens mit Ä.

    PPS: Und du solltest dir eventuell mal eine Sammlung anlegen, wo du oft gebrauchte Code-Schnipsel zwischenlagerst.



  • Und wie soll ich das im Builder schreiben?^^



  • Die Standard-Lib gehört zu einem vernünftigen C++ Compiler eigentlich dazu - und eigentlich dachte ich, der Builder ist ein vernünftiger Compiler 😃

    (anders ausgedrückt: die bitset<>s sollten auch im Builder funktionieren)



  • Ja aber wie soll ich das genau schreiben? xD



  • Soll ich dich noch mit der Hand dorthinführen? Klick mal da unten auf meine Signatur, da kommst du zu einer Liste meiner Magazin-Artikel. Und dort werden auch die bitsets<> behandelt (wenn auch nur kurz, aber die Binärumwandlung mit ihrer Hilfe steht dort drin).



  • Ansonsten bietet sich noch die schöne Möglichkeit, das über Bitmasken, schleifen und Bitmanipulationsbefehlen zu lösen.

    Dazu vielleicht mal die Operatoren
    &
    <<
    |
    anschauen.



  • vielleicht nicht die kürzeste und schönste variante, aber es funzt 🙂
    Eingabe:
    zahlenbasis(8,2,7)

    Ausgabe=00000111

    bei einer anderen Basis eben andere Zahlen, für Hex musste kurz ein paar kleine zusätzliche if-abfragen einbauen

    AnsiString zahlenbasis(int laengestring, int basis, long aktuellezahl)
    {
     AnsiString endestring="";
     long a=1,b=1,c,i,l;
     c=aktuellezahl;
     do{
       a=c%basis;
       b=c/basis;
       endestring=IntToStr(a)+endestring;
       c=b;
     }while(b!=0);
     l=endestring.Length();
     for (i=0;i<(laengestring-l);++i)
      endestring="0"+endestring;
     return endestring;
    }
    

    warum ich die den code hinschreibe, lol, weil ich bestimmt keine lust habe mit irgendetwas rumzuprotzen -> guck da und da lol 😃 und weil ich das unter Hilfe verstehe
    viel SPass damit



  • blazer1981 schrieb:

    vielleicht nicht die kürzeste und schönste variante, aber es funzt 🙂

    In der Tat eine sehr unschöne Variante.

    blazer1981 schrieb:

    warum ich die den code hinschreibe, lol, weil ich bestimmt keine lust habe mit irgendetwas rumzuprotzen -> guck da und da lol 😃

    Was hat das mit rumprotzen zu tun? Wozu werden Artikel geschrieben, wenn sie doch nicht gelesen werden? Genau diese "ich lass mir alles vorkauen"-Haltung führt zu einem zunehmen sinkenden Niveau der Fachkräfte....!

    blazer1981 schrieb:

    und weil ich das unter Hilfe verstehe
    viel SPass damit

    Die Verweise geschehen aus zwei Gründen:

    • geht es um eine Hilfe zur Selbsthilfe. Mit jedem Verweis lernt man mehr darüber wo Informationen zu finden sind, und wie diese Infos auszuwerten sind. Wenn man mit Ausführungen nicht klar kommt, kann man ja ungehemmt nochmlas fragen, was denn nun die Aussage einer bestimmten Quelle bedeutet. So werdet ihr alle besser darin, die Infos selbst zu finden.
    • der Hilfesuchende ist zum selbst denken gezwungen. Das ist wichtig für den Lernprozess und mündet in ein erheblich besseres Gefühl beim selbst erreichen der Lösung

    @Topic: Mit sogenannten Bitmasken lässt sich sowas sehr einfach und vor Allem Prozessoreffizient erledigen.
    Im Übrigen, blazer1981, lässt sich eine generische Funktion wie die Deine auch ohne spezielle If-Abfragen für andere Basen lösen. Aber wie gesagt: Dafür muss man etwas mehr über Bitmanipulationsroutinen und den Aufbau von binärcodierten Datenwörtern wissen.



  • @Topic: Mit sogenannten Bitmasken lässt sich sowas sehr einfach und vor Allem Prozessoreffizient erledigen.
    Im Übrigen, blazer1981, lässt sich eine generische Funktion wie die Deine auch ohne spezielle If-Abfragen für andere Basen lösen. Aber wie gesagt: Dafür muss man etwas mehr über Bitmanipulationsroutinen und den Aufbau von binärcodierten Datenwörtern wissen.

    Mach mich bitte einfach schlau 🙂

    ->binärcodierten Datenwörtern, wieso eigentlich so kompliziert, und wieso überhaupt Wörter? Wäre Byte nicht korrekt, oder muss man in 16 Bit arbeiten, um 8 Bit ASCII Zeichen zu manipulieren?

    Ohne "If-Abfragen"? Wie könnte ich mir das vorstellen?
    ABC..
    A=01000001
    B=01000001 + 1 = 01000010
    etc.
    Trotzdessen muss ich doch den Wert abfragen????

    lässt sich eine generische Funktion wie die Deine auch ohne spezielle If-Abfragen für andere Basen lösen.

    Was meinste damit? Ich weiss das ich beliebige Basen einsetzen kann, weil ich die Funktion geschrieben hab, aber aus der Aussage werd ich icht so ganz schlau.

    Oder Gib mir mal einen Link, wo ich mich schlau machen kann, speziell auf Bitmasken bezogen, thx



  • blazer1981 schrieb:

    Mach mich bitte einfach schlau 🙂

    Gerne. bin nur etwas in Zeitnot und etwas schreibfaul...

    blazer1981 schrieb:

    ->binärcodierten Datenwörtern, wieso eigentlich so kompliziert, und wieso überhaupt Wörter? Wäre Byte nicht korrekt, oder muss man in 16 Bit arbeiten, um 8 Bit ASCII Zeichen zu manipulieren?

    http://de.wikipedia.org/wiki/Datenwort

    blazer1981 schrieb:

    Ohne "If-Abfragen"? Wie könnte ich mir das vorstellen?

    Das Geheimnis für das Verständnis liegt im fettgedruckten Teil des untenstehenden Quotes... Lies ihn ein paar mal.

    junix schrieb:

    lässt sich eine generische Funktion wie die Deine auch ohne spezielle If-Abfragen für andere Basen lösen.

    junix schrieb:

    Was meinste damit? Ich weiss das ich beliebige Basen einsetzen kann, weil ich die Funktion geschrieben hab, aber aus der Aussage werd ich icht so ganz schlau.

    Abgesehen von der Tatsache, dass unterschiedliche Basen zu setzen kein verlangtes Feature ist, gibt es einen eleganteren Weg die Funktionalität zu erreichen. So lässt sich ein dezimaler Wert bis zur maximalen Breite von einem Nibble (0..15) durch eine kleine Lookuptable oder vielleicht auch durch die Verwendung von ASCII-Werten flexibler gestalten.

    blazer1981 schrieb:

    Oder Gib mir mal einen Link, wo ich mich schlau machen kann, speziell auf Bitmasken bezogen, thx

    Gerne: Spezielle BitmaskentutorialsDer erste Link dieser noch sehr unbekannten Tutorialsammlung ist besonders empfehlenswert für das grundlegende Verständnis von Bitmasken.



  • Naja, wenn man Datenwort so definiert, ok.. wegen mir. Ich bin eben nur Nachrichtentechniker :), trotzdessen ist mir dieser Standard der Bitoperationen durchaus bekannt und wie ich einzelen Wörter verunde oder voroder etc stellt nicht das Problem dar.

    Da ich jedoch kein Informatiker bin, stellt sich für mich die Frage, wie ich so eine "If-Abfrage" im übertragenen Sinn realisieren kann. Meine Vorlesungen haben andere Inhalte gehabt als Methoden der Programmierung. Bei uns beschränkte sich das eher auf das Funktionale und schenkte dem Optimierte eher weniger Beachtung.

    Also für die ganz schlauen Informatiker (nicht jeder hat genau das studiert) sei gesagt, wenn einer fragt, ist er nicht unbedingt zu faul zum Suchen, sondern es fehlt eher der besondere Background, der einen die Suche zum Ergebnis sehr erschwert und da wären gescheite Tipps sinnvoll. Sollte meine Bitte falsch angekommen sein, dann hoffe ich es jetzt klarer Ausgedrückt zu haben.

    Eins deutet nämlich nicht von Qualifikation, Ironie in einer Antwort! Den alten Hasen muss man nämlich nicht raushängen lassen...



  • blazer1981 schrieb:

    Naja, wenn man Datenwort so definiert, ok.. wegen mir. Ich bin eben nur Nachrichtentechniker :), trotzdessen ist mir dieser Standard der Bitoperationen durchaus bekannt und wie ich einzelen Wörter verunde oder voroder etc stellt nicht das Problem dar.

    Wieso fragst du denn danach?

    blazer1981 schrieb:

    Da ich jedoch kein Informatiker bin,

    Sind wir ja schon zwei.

    blazer1981 schrieb:

    stellt sich für mich die Frage, wie ich so eine "If-Abfrage" im übertragenen Sinn realisieren kann.

    Die KRitik war nicht generell gegen If-Abfragen gerichtet, wie du vielleicht schon bemerkt hast, sondern gegen Fallunterscheidungen bei anderen Basen. Hat übrigens nix mit Methoden der Programmierung zu tun sondern schlicht mit Mathematik.

    blazer1981 schrieb:

    wenn einer fragt, ist er nicht unbedingt zu faul zum Suchen, sondern es fehlt eher der besondere Background, der einen die Suche zum Ergebnis sehr erschwert und da wären gescheite Tipps sinnvoll.

    Weshalb man ja Denkanstösse was lesenwert ist verteilt. Es stellt sich auch immer die Frage wie man die Frage stellt... nur nach Code betteln bringt einem ja selten weiter. Natürlich gibt es da einige besondere Exempalre... aber die häufgere variante ist "ich muss meine hausaufgaben noch durchkriegen... ich frag mal im Forum" und das kann nciht sinn und zweck sein.

    blazer1981 schrieb:

    Eins deutet nämlich nicht von Qualifikation, Ironie in einer Antwort! Den alten Hasen muss man nämlich nicht raushängen lassen...

    Och entschuldige, sollte ich dich in deiner Ehre gerkänkt haben. Aber irgendwie überrascht es mich immer wieder, dass offenbar der Aufwand des Schreibens eines Beitrags und der anschliessende Zeitverlust beim Warten auf eine Antwort als weniger schwer bewertet wird, als das eigenständige suchen. Die Ausrede mit dem fehlenden Background zieht in diesem Kontext übrigens nicht, denn die richtigen Begriffe hast du ja schon erhalten.

    Im geposteten Artikel wird ja schliesslich wunderschön erklärt, wie man auf das (nicht) gesetzt sein eines Bits prüfen kann. Sogar in C gibt es Beispielcode. Weiter muss man sich hald etwas eingehender mit dem Thema Binärcode auseinandersetzen bzw. mit der Wertigkeit von Bits oder kurz: mit seinem Arbeitsgerät beschäftigen. Wenn jedoch einer die Aufgabe hat, Irgendwas von Dezimal nach Binär zu wandeln, gehe ich mal davon aus, der sollte diese Knenntnisse im Rahmen seiner Ausbildung beigebogen gekriegt haben. Ansonsten ist die Wandlung ja ein rein mathematisches Problem, welches einem zwar zu (d)einer Lösung bringt, welche vielleicht nicht perfekt ist aber funktional.


Log in to reply