enum Klausur Aufgabe



  • { ja, nein, vielleicht, weiss_nicht}; äquivalent zu
    {0,1,2,3};


  • Mod

    RBS1979 schrieb:

    { ja, nein, vielleicht, weiss_nicht}; äquivalent zu
    {0,1,2,3};

    Was kommt heraus, wenn du diese Werte jeweils in bool konvertierst?


  • Mod

    Bist du eigentlich völlig balla balla, dass du einfach annimmst, ein Enumerator mit dem Namen "ja" konvertiere automatisch nach true ? Was hat der Name einer Entität mit deren Wert zu tun?

    Enumeratoren werden nach einem einfachen Muster Werte zugewiesen: Wenn der erste Enumerator keinen Initializer hat, hat er den Wert Null. Wenn einer der anderen keinen Initializer hat, dann wird ihm der Wert seines Vorgängers + 1 zugewiesen. In diesem Fall hat ja den Wert 0 und nein den Wert 1 .



  • 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