long long int mit konstante verknüpfen



  • hallo ich habe so etwas in meinem code, um die 9 unteren bits aus der variable zu entfernen:

    settings = gs->selectedsettings & ~0x1FF;
    

    settings und selectedsettings sind vom typ long long int, also 64 bit breit. es scheint so zu funktionieren, aber funktioniert das wirklich so, oder sollte ich lieber 0x00000000000001FF verwenden?



  • Das reicht.

    0x1FF ist erstmal ein int . Dieser wird für den &-Operator in ein long long int gewandelt.

    Zudem brauchst du auch nicht die ganzen Nullen hinschreiben 0x1ffLL ist auch ein long long (es gehen auch kleine L, nur kann man die schlecht von der 1 unterscheiden l1)

    Edit: Das mit dem LL-Suffix ist dann wichtig, wenn du die Bits vorher noch verschieben willst.

    settings = gs->selectedsettings & ~(0x1FF << 30); // geht nicht, wenn int nur 32 bit
    
    settings = gs->selectedsettings & ~(0x1FFLL << 30);  // geht
    

Log in to reply