variablenwert überprüfung mit bitlogischen operatoren



  • hi,
    folgender code schnipsel

    int sub = 19;
    if(sub < 0 || sub > 32)
         return false;
    

    die obige if abfrage möchte ich mit hilfe bitlogischer operatoren optimieren.
    wie kann ich dies realisieren?



  • Hi

    Vielleicht so:

    if( ((unsigned)sub) & 0xffffffe0 )
    return false
    

    Gebe aber keine Garantie. Habs nicht getestet. Vielleicht hab ich mich in der Eile mit den Hex-Werten verhauen. Aber vom Prinzip her könnte es das sein.

    Gruss SeriousSam



  • Leute die glauben Sie müssten if-Anweisungen in diese Art optimieren, sollten
    bedenken das in 99,9% aller Fälle das (Performance-)Problem in den Algorithmen
    und dem der ihn implementiert begründet ist. 😉

    Bevor du mit derartigen Optimierungsversuchen anfängst schau dir besser den
    den Rest deines Programmes an. Garantiert liegen da deine wirklichen Probleme.



  • xerxes schrieb:

    hi,
    folgender code schnipsel

    int sub = 19;
    if(sub < 0 || sub > 32)
         return false;
    

    die obige if abfrage möchte ich mit hilfe bitlogischer operatoren optimieren.
    wie kann ich dies realisieren?

    Das wirst du wohl besser nicht hinbekommen. Wenn du geschrieben hättest

    if(sub < 0 || sub > 31)
        return false;
    

    Dann könntest du folgendes machen

    if ((sub & ~31) != 0)
        return false;
    

    Wobei das noch lange nicht schneller sein muss.



  • redhead, du hast recht, jedoch war es nur eine interessenfrage, die aufkam, als ich mir diese if abfrage ansah. 🙂
    die performanence des ganze programms werde ich natürlich auch noch unter die lupe nehmen.

    danke für die antworten


Anmelden zum Antworten