**** Редактировать **: Мой первый комментарий применяется до редактирования Кевина, но я оставлю его здесь для потомков. Иногда ответы меняются очень быстро!
Проблема с подходом Кевина состоит в том, что с Fixed Point вы обычно упаковываетесь в гарантированный размер слова (обычно 32 бита). Объявление двух частей по отдельности оставляет вас в прихоти структуры вашего компилятора. Да, вы могли бы форсировать это, но это не работает ни для чего, кроме представления 16:16.
KPexEA ближе к цели, упаковав все в int - хотя я бы использовал «sign long», чтобы попытаться быть явным на 32битах. Затем вы можете использовать его подход для генерации значения с фиксированной точкой, а разделение битов снова извлекает составные части. Его предложение также охватывает случай 24: 8.
(И все остальные, кто предложил просто static_cast ..... о чем ты думал?;))