Язык C. Имеем на входе беззнаковое число, например, uint32_t. Но на самом деле в нем находится, например, 25 битовое знаковое число. В 25-м бите признак отрицательного числа, в 26..32 битах нули. Размер числа в битах задаётся параметром. Как бы более правильно сделать функцию типа int32_t to_signed32(uint32_t value, uint8_t bits)? Вижу вариант с кучей юнионов (по одному на каждое количество битов), ну и всякая арифметика.