enum Klausur Aufgabe



  • Hallo ich bitte nochmal um Unterstützung



  • Nimm ein Sinvolles Buch zu C++ und ließ es!



  • RBS1979 schrieb:

    Hallo ich bitte nochmal um Unterstützung

    Lies nach dem Balla Balla einfach weiter.



  • Netter Umgangston hier, und ich hab mich schon gefragt wieso so wenig Leute unterwegs sind.

    Eine implizite Typumwandlung von int nach bool funktioniert, dabei wird allerdings jeder integer Wert, der in Binärdarstellung NICHT komplett aus 1en besteht als false angesehen.

    Versuch mal:
    #include <bitset>
    #include <iostream>

    int main()
    {
    int i = 0;
      int i2 = ~i;
    
      std::cout << "\n i ist: " << std::bitset<32>(i) << std::endl;
      std::cout << "\n i2 ist: " << std::bitset<32>(i2) << std::endl;
    
      if (i)
        std::cout << "i ist wahr";
      if (i2)
        std::cout << "i2 ist wahr";
    
    }
    

    Unter der Annahme, dass 32 die Länge eines int auf deinem System ist.



  • Witziger 'Beweis'...
    Um zu zeigen, dass "jeder integer Wert, der in Binärdarstellung NICHT komplett aus 1en besteht als false angesehen" wird, testest du 00...00 und 11...11 !?


  • Mod

    Ballamann schrieb:

    Eine implizite Typumwandlung von int nach bool funktioniert, dabei wird allerdings jeder integer Wert, der in Binärdarstellung NICHT komplett aus 1en besteht als false angesehen.

    Unfug. Für jeden Wert x eines skalaren Typs T, der in bool konvertiert kann, gilt:

    bool(x) == (x != T{})
    

    Mit der Darstellung der Werte hat das nichts zu tun.



  • Also ein Beweis ist es natürlich nicht, dazu fehlt die Vollständigkeit. Aber ich gebe dir bei der Wahl der Zahlenbeispiele recht, die sind etwas Balla Balla 😃

    Ich wollte einfach "ja" und (nicht "ja") testen (das enum).

    Danke an Jockelx für den Hinweis:
    Zur Klarheit: Pädagogisch besser wäre es wohl gewesen, statt der 0 eine andere Zahl zu testen, etwa 42 oder 1337 oder Ähnliches. In diesem Fall sollte i2 aber auch angepasst werden.



  • Ging ja nicht um irgendwas pädagogisches oder so, sondern dass du aus deinen Beispielzahlen etwas falsches geschlossen hast.

    Siehe campers Antwort.


  • Mod

    Die Behauptung mit der internen Darstellung ist halt schlicht falsch. Der Standard sagt, dass für bool-Konvertierung arithmetischer Werte genau dann false heraus kommt, wenn der Wert (mathematisch) gleich 0 ist. Nun gibt es aber für viele Datentypen mehrere Repräsentationen der 0 (Häufiges Beispiel: Fließkommazahlen haben positive und negative 0), die offensichtlich nicht alle intern nur durch Nullen dargestellt sein können. Selbst für Integer gilt die Annahme nicht. Der Standard erlaubt explizit Einerkomplement zur internen Darstellung, diese hat ebenfalls zwei Darstellungen der 0.

    Der Konstruktor von Bitset richtet sich zudem auch nicht nach der internen Darstellung des Arguments, sondern nach dem mathematischen Wert. Wäre auch schlimm, wenn es anders wäre, man denke nur an Endianess.


  • Mod

    SeppJ schrieb:

    Die Behauptung mit der internen Darstellung ist halt schlicht falsch. Der Standard sagt, dass für bool-Konvertierung arithmetischer Werte genau dann false heraus kommt, wenn der Wert (mathematisch) gleich 0 ist. Nun gibt es aber für viele Datentypen mehrere Repräsentationen der 0 (Häufiges Beispiel: Fließkommazahlen haben positive und negative 0), die offensichtlich nicht alle intern nur durch Nullen dargestellt sein können. Selbst für Integer gilt die Annahme nicht. Der Standard erlaubt explizit Einerkomplement zur internen Darstellung, diese hat ebenfalls zwei Darstellungen der 0.

    Das Problem mit der 0 ist nicht mal das gravierendste:

    jeder integer Wert, der in Binärdarstellung NICHT komplett aus 1en besteht

    , das sind alle (0,1,2,3,4,...) bis auf einen. Und die sollen alle false ergeben...


  • Mod

    camper schrieb:

    Das Problem mit der 0 ist nicht mal das gravierendste:

    jeder integer Wert, der in Binärdarstellung NICHT komplett aus 1en besteht

    , das sind alle (0,1,2,3,4,...) bis auf einen. Und die sollen alle false ergeben...

    Ojeh, das habe ich im Kopf als "komplett aus 0en" gelesen. Da hat mein Hirn ausgeblendet, dass jemand das Gegenteil behaupten könnte.


Anmelden zum Antworten