Standardvorgehensweise, ein Bit auf 0 zu setzen



  • Hallo,
    ich wollte eine Funktion schreiben, die ein bestimmtes Bit eines unsigned int auf 0 setzt. Im Moment habe ich diese Version:

    void unset(unsigned int position)
    {
        zahl &= ( (~0u) ^ ( 1u << position ) );
    }
    

    zahl ist in dem Falle auch ein unsigned int. Die Funktion verundet also die zahl mit einem unsigned int, in dem alle bits auf 1 gesetzt sind, außer das an "position". Aber irgendwie kommt mir dieser Weg so umständich vor.
    Gibt es eine andere - vll sogar gewöhnliche - Vorgehensweise, dieses Problem zu lösen?



  • Ein wenig kann ich schonmal rausmachen.

    void unset(unsigned int position)
    {
        zahl &= ~( 1u << position );
    }
    

  • Mod

    Malcolm85 schrieb:

    . Aber irgendwie kommt mir dieser Weg so umständich vor.
    Gibt es eine andere - vll sogar gewöhnliche - Vorgehensweise, dieses Problem zu lösen?

    Übersetzt sind das ca. 2 Maschinenbefehle. Ich glaube nicht, dass das noch besser geht.


Anmelden zum Antworten