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