if((zahl & 1L)==0)



  • Hallo zusammen

    if(zahl & 1L)==0)

    Ich weiß zwar das diese bedingung überprüft ob eine zahl gerade ober ungerade ist (was soweit ich weiß am letzten bit zu erkennen ist).
    Was mich nun interessieren würde ist wie das ausgewertet wird wenn ich
    z. B einmal für zahl=3 und einmal für zahl=4 nehme??

    Und was bedeutet 1L???

    überprüft diese Bedingung auch ob eine zahl gerade oder ungerade ist??:

    if(zahl & 1)



  • Guanin schrieb:

    Was mich nun interessieren würde ist wie das ausgewertet wird wenn ich
    z. B einmal für zahl=3 und einmal für zahl=4 nehme??

    3 == 11 (binär), 11 & 1 == 1 -> ungerade
    4 == 100 (binär), 100 & 1 == 0 -> gerade

    Guanin schrieb:

    Und was bedeutet 1L???

    Dass 1 ein long int ist, analog z.B. 3.14159265358979323846f.

    Guanin schrieb:

    überprüft diese Bedingung auch ob eine zahl gerade oder ungerade ist??:

    if(zahl & 1)

    Ja, und ist lesbarer, da das L überflüssig ist.



  • was iss mit diesen funktionen ?

    bool IssEsNeUngradeZahl(int zahl)
    {
     return (zahl % 2);
    
    }
    

    und

    bool IssesNeGradeZahl(int zahl)
    {
    return !IssEsNeUngradeZahl(zahl);
    }
    


  • Das sind simple Funktionen. Und `%' wird in diesem Kontext als Modulo-Operator genutzt. Das sagt uns? Ja genau, für alle geraden Zahlen a gilt
    a % 2 == 0

    Und tschüss



  • Das mit Modulo (%) geht auch, aber mit dem & ist es um einiges schneller. (Auch wenn Rechenzeit für die meisten uninteresant ist ;))



  • %2 wird doch wohl hoffentlich in ein and mit 1 übersetzt ...



  • Wenn der Compiler so schlau ist...



  • Das waren die Compiler schon vor mindestens 10 Jahren.



  • Grundsätzlich werden wohl die heutigen Compiler konstante Arithmetik durch Bitshifting versuchen zu ersetzen. Und nur damit es l33t3r aussieht muss ich nicht unbedingt

    if(i & 1) {
        /* ungerade */
    } else {
       /* gerade */
    }
    

    schreiben. Darüber kann man sich nach Fertigstellung des Programmes und exzessivem Profiling Gedanken machen.

    Gruß Tobias


Anmelden zum Antworten