& = AND. 1 hvis begge bitsa er 1
| = OR. 1 hvis hvem som helst av bitsa er 1
^ = XOR. 1 hvis bitsa er forskjellige
~ = NOT. Inverterer alle bits
<< = LEFT SHIFT. bits å shifte << hvor mange plasser
>> = RIGHT SHIFT. bits å shifte >> hvor mange plasser
For eksempel, ta denne funksjonen:
bool Adafruit_BusIO_RegisterBits::write(uint32_t data) {
uint32_t val = _register->read();
// mask off the data before writing
uint32_t mask = (1 << (_bits)) - 1;
data &= mask;
mask <<= _shift;
val &= ~mask; // remove the current data at that spot
val |= data << _shift; // and add in the new data
return _register->write(val, _register->width());
}
La oss si
val = 00101011
data = 6 (0110)
_bits = 3
_shift = 4
data = 6
val = 00101011
mask = (1 << (3)) - 1; = 7 / 0111
data &= mask = 6 / 0110
mask = 7 / 0111
data = 6 / 0110
mask <<= _shift; = 96 / 01100000
val &= ~mask; = val &= -97 / 10011111;
00000000
10011111
val = 00000000
val |= data << _shift;
val |= 01100000;
00000000
01100000
= 01100000
val &= ~mask; = val &= -97 / 10011111;
00101011 &= 10011111
= 00001011
01100000
01101011