Binärdarstellung



  • also Zeile 15 war um etwas zu testen, das sollte eigentlich weg.



  • SeppJs Vorschläge führen in die Irre. Es sollen Bitoperationen benutzt werden! Damit von 10 auf die Basis 2 zu kommen scheint mir kaum einfach möglich. Am besten ist es, in einer Schleife zu testen, ob das jeweilige Bit gesetzt ist. Die kann dann auch rückwärts laufen.

    int Bytes = sizeof z;  // z = eingelesene Zahl
      int Bits = 8 * Bytes;
      for (int k = Bits - 1; k >= 0; --k) {
        if (BEDINGUNG)) {  // Hier die richtigen Bit-Operationen eintragen,
    // um festzustellen ob Bit k gesetzt ist
          cout << 'L';
        } else {
          cout << '0';
        }
      }
    


  • Fangen wir mal so an: Was für Bitoperationen kennst du denn?


  • Mod

    lieber so! schrieb:

    Damit von 10 auf die Basis 2 zu kommen scheint mir kaum einfach möglich.

    Also ich kenne da eine 1:1 Korrespondenz von "geteilt durch 2" und "modulo 2" zu gewissen Bitoperationen.



  • SeppJ schrieb:

    Also ich kenne da eine 1:1 Korrespondenz von "geteilt durch 2" und "modulo 2" zu gewissen Bitoperationen.

    UND möchtest du diese mitteilen? Oder VERSCHIEBST du das auf später?



  • SeppJ schrieb:

    lieber so! schrieb:

    Damit von 10 auf die Basis 2 zu kommen scheint mir kaum einfach möglich.

    Also ich kenne da eine 1:1 Korrespondenz von "geteilt durch 2" und "modulo 2" zu gewissen Bitoperationen.

    Und wieso ist das "einfach", verglichen mit der Schleife? Zeigen!



  • Wer sagt, dass auf die Schleife verzichtet wird?

    1. Das Programm asu dem ersten Post von Braymann auf Basis 2 umbauen.
    2. Das / und % durch Bitoperationen ersetzen.

    Es ging nie darum, das /10 bzw %10 durch Bitoperationen zu ersetzen.



  • DirkB schrieb:

    Wer sagt, dass auf die Schleife verzichtet wird?

    1. Das Programm asu dem ersten Post von Braymann auf Basis 2 umbauen.
    2. Das / und % durch Bitoperationen ersetzen.

    Es ging nie darum, das /10 bzw %10 durch Bitoperationen zu ersetzen.

    Niemand. Es ging um den Vergleich mit der gezeigten Schleife. Und es gibt einfache und komplizierte Schleifen, verschachtelte usw. Dein Ansatz hat einen Fehler: Er würde nur für nicht-negative Zahlen funktionieren. Es geht aber um ganze Zahlen (Aufgabe lesen)! Ein funktionierendes Gegenbeispiel würde mich überzeugen (in C++, nicht in Andeutungen/Empfehlungen wie oben).



  • Es geht um ganze Zahlen, auch wenn nur positive eingelesen werden sollen. Diese Einschränkung scheint für den Anfänger sinnvoll, blockiert aber den Ansatz auch für Zahlen < 0.


  • Mod

    lieber so! schrieb:

    Diese Einschränkung scheint für den Anfänger sinnvoll,

    Dann weißt du ja auch, warum das für den Anfänger sinnvoll ist.

    Deine Lösung hat nämlich 3 Nachteile, von denen ich in meinem Beitrag bereits 2 erwähnte:
    -Man muss wissen, wie lange die Zahl maximal sein kann. Das ist mit sizeof zufriedenstellend gelöst. Aber wenn du schon so penibel bist, auf alle möglichen Erweiterungen zu bestehen, dann geht der Algorithmus schief, wenn der Datentyp ein Integer mit beliebiger Länge wird.
    -Das Problem mit den führenden Nullen ist noch ungelöst und für Anfänger zwar lösbar, aber nicht schön.
    -Die zu benutzenden Bitoperationen sind meiner Ansicht nach für Anfänger wesentlich schwieriger nachzuvollziehen. Ich möchte aber ungern ins Details gehen, da es die Lösung verraten würde. Bei der von mir vorgeschlagenen Lösung kommt es hingegen zu der Erkenntnis, was Bitverschiebung mathematisch bedeutet, was später sicherlich noch nützlich ist. Bei deiner Lösung kommt es zu der Erkenntnis, wie man Bitmasken erstellen kann. Sicherlich auch sehr nützlich, aber ein fortgeschritteneres Thema, zu dem man erst einmal das mathematische Verständnis der Bitoperation haben sollte.

    Außerdem habe ich ausdrücklich erwähnt, dass es viele Methoden gibt und deine sogar explizit aufgezählt mit Vor- und Nachteilen. Ich verstehe überhaupt nicht, wieso du hier von Irreführung sprichst. Unverständnis oder absichtlich Unruhestiftung?



  • deine Argumente leuchten ein. Zur "Irreführung": Ich nahm an, dass der Schwerpunkt der Aufgabe eben gerade die Bitoperationen sind und sah deinen Weg deshalb als überflüssigen Umweg an. Wenn man sich dem Problem Bitoperatoren erst nach und nach nähern soll, wie für lernende zu empfehlen, ist das aber doch wohl sinnvoll.


Anmelden zum Antworten