В C мне нужно масштабировать uint8_t от 0 - 255 до 0 - 31
uint8_t
Каков наилучший способ сделать это равномерно?
Если вы пытаетесь масштабировать от 8 до 5 бит, вы можете сделать 3-битное смещение;
uint8_t scaled = (uint8_t)(original >> 3);
Это отбрасывает младшие 3 бита.
Вы можете использовать простое умножение и деление:
uint8_t scaled = (uint8_t)(((uint32_t)original * 32U) / 256U);