Qué estudiar para lograr comprender programación a nivel bajo, de bits. Ejemplo.

Hola a todos, estoy intentando entender a nivel bajo(a nivel de bits) una librería de arduino, la del IMU BNO055 (acelerómetro y giroscopio).

Podría preguntar por un lado si alguien sabe qué hacen pormenorizadamente
esas líneas, aunque entiendo que es una tarea tediosa,
por lo que me gustaría saber
qué conocimientos me vendrían bien para entender este código.

Estoy ya tratando de estudiar C++ pero lo que no entiendo son las operaciones en las que se empiezan a mover bits, como esta euler.intX = ((int16_t)rawData[1] << 8) | rawData[0] ;

void BNO055::readEul(){
    uint8_t rawData[6];  // x/y/z gyro register data stored here
    readBytes(BNO055_ADDRESS, BNO055_EUL_HEADING_LSB, 6, &rawData[0]);  // Read the six raw data registers sequentially into data array
    euler.intX = ((int16_t)rawData[1] << 8) | rawData[0] ;				// Turn the MSB and LSB into a signed 16-bit value
    euler.intY = ((int16_t)rawData[3] << 8) | rawData[2] ;  
    euler.intZ = ((int16_t)rawData[5] << 8) | rawData[4] ;
    euler.x= (float)euler.intX/16.;
    euler.y= (float)euler.intY/16.;
    euler.z= (float)euler.intZ/16.;
}

Cualquier orientación sobre qué podría estudiar para entenderlo me vendría genial, muchas gracias

PD: mi formación es técnico en electrónica y llevo un par de años “cacharreando” con Arduino

Primero deberías estudiar el hardware del modulo, es decir en que circuito integrado esta basado, mira sus caracteristicas, etc. Normalmente el esquema no lo proporciona el fabricante, tendrás que hacer ingeniería inversa.

Mira aqui a ver si hay mas datos.