Учитывая номер uint32 0x12345678 (например, значение цвета RGBW), как я мог эффективно и динамически масштабировать каждый байт в нем (учитывая масштабный коэффициент 0 <= f <= 1
(или эквивалентный целочисленный делитель)?
Я знаю, что мог бы сделать это более длинным способом (разбить число на его компоненты, возможно, с помощью структуры и цикла для управления каждым по очереди), но есть ли способ сделать это быстрее, без зацикливания? (Сопоставление статических значений может быть другим способом, но динамический метод предпочтительнее.)
Редактировать: C++ (C идеи тоже интересны), встроенные, сотни или тысячи пикселей (не миллионы). Специально масштабируемые светодиоды RGBW.
Еще одна вещь, которая возникла - это с gcc, так что типовое перенапряжение разрешено (я уже использовал его для подобных вещей - я просто хотел посмотреть, есть ли лучший способ, чем этот).
Отредактируйте снова: это для встроенных платформ (микроконтроллеров) Хотя я полностью отвечаю на вопросы, которые помогают более широкой аудитории, я специально спросил об этом в контексте языка (ов) и алгоритмов, а не оптимизаций для конкретных платформ и наборов инструкций, поскольку оптимизации для конкретной платформы могут отличаться, если вообще присутствуют,