Gerade oder ungerade? (Zahlentest 2)



  • da war ich wohl zu spät 😃



  • Hey, danke!

    Ja, da merkt man, daß ich noch am Anfang stehe...

    Aber ich lerne gerne dazu, wie sich Arbeit einsparen lässt. 🙂



  • da war ich wohl zu spät 😃 3 mal die geiche antwort in einer minute....



  • Ich hätte da noch eine Variante:

    bool iseven(int value)
    {
      return (value & 1) == 0;
    }
    


  • da musst man aber auf die byte order aufpassen.



  • tntnet:
    Unabhängig von Byteorder: Weniger intuitiv, man kann mit der Klammer Fehler machen (wenn man sich die Schreibweise angewöhnt und die Warnung ignoriert) und die Optimierung dahinter wird vom Compiler sowieso gemacht. Bin also nach wie vor für die %2-Variante.



  • Der Kommentar mit der "byte order" ist ja wohl nicht ernst gemeint?!

    Noch eine Variante:

    return !(x % 2);
    

    😉

    Aber egal welche Variante man wählt, der Compiler wird eh daraus den gleichen Code generieren (bei aktivierter Optimierung).



  • vario-500 schrieb:

    da musst man aber auf die byte order aufpassen.

    Eisflamme schrieb:

    tntnet:
    Weniger intuitiv, man kann mit der Klammer Fehler machen (wenn man sich die Schreibweise angewöhnt und die Warnung ignoriert) und die Optimierung dahinter wird vom Compiler sowieso gemacht. Bin also nach wie vor für die %2-Variante.

    Th69 schrieb:

    Aber egal welche Variante man wählt, der Compiler wird eh daraus den gleichen Code generieren (bei aktivierter Optimierung).

    Schwache Antworten 👎 . Dass die Byteorder keine Rolle spielt, sollte klar sein.

    Die Klammersetzung ist auch kein Problem, die Operatorprecedence sollte man als C++-Programmierer verinnerlicht haben (notfalls ein Klammerpaar mehr als nötig).

    Aber das Wichtigste: Bei signed Typen wird eben nicht der gleiche Code erzeugt.


  • Mod

    unreg schrieb:

    Aber das Wichtigste: Bei signed Typen wird eben nicht der gleiche Code erzeugt.

    Doch!


  • Mod

    unreg schrieb:

    Aber das Wichtigste: Bei signed Typen wird eben nicht der gleiche Code erzeugt.

    Falls der Computer 1er-Komplement für die Darstellung verwendet...



  • Du meinst wegen der Doppelbedeutung der Null bei 1er-Komplement, so daß die Binäre-Und-Verknüpfung nicht das richtige Ergebnis liefern würde?

    Da ich noch nie mit einem 1er-Komplement Prozessor gearbeitet habe: würde denn dann der Modulo-Operator beide Null-Darstellungen mit beachten?



  • -1 im Einer-Komplement ist 11111110.



  • SG1 schrieb:

    -1 im Einer-Komplement ist 11111110.

    Im prinzip richtig. Aber der Computer arbeitet normalerwiese im Zweierkomplement und da ist -1 11111111. Und damit sind die Lösungen wieder äquivalent. Aber der Hinweis auf Intuitivität ist richtig. Die Modulo-Lösung ist tatsächlich offensichtlicher und daher besser.


Anmelden zum Antworten