Для фиксированной точки 8.24 каждый uint32_t
(или эквивалентный) будет содержать число в диапазоне от 00000000.000000000000000000000000b до 11111111.111111111111111111111111b.
Если число с плавающей запятой находится в диапазоне от 0,000000000000000 до 1,000000000000000, вам необходимо умножить его на (1 << 24)
перед преобразованием его в целое число без знака; так что вы в конечном итоге с 8,24 фиксированной точкой.
Для uint8_t
, где 0x00 представляют 0,0, а 0xFF представляет 0,996; вам придется умножить его на (1 << (24-8))
(или сдвинуть влево на 16 мест), чтобы преобразовать его в 8,24 фиксированной точки.
Для uint8_t
, где 0x00 представляют 0,0, а 0xFF представляет 1,0; вам придется умножить его на (1 << 24)
(или сдвинуть влево на 24 позиции), а затем разделить на 0xFF, чтобы преобразовать его в 8,24 фиксированной точки.
Чтобы преобразовать 8,24 фиксированную точку обратно в любой из вышеприведенных случаев, вы должны сделать обратное (например, умножить на 0xFF, а затем сдвинуть вправо на 24 места, чтобы вернуться к uint8_t
, где 0xFF представляет 1,0).