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 einlong 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