Можно ли в C представить число с фиксированной точкой в двоичной форме, чтобы его можно было передать без использования поплавков?
Я знаю, как преобразовать float или double в желаемое представление с фиксированной точкой, но я застрял, когда это нужно сделать без плавающих точек. Проблема в том, что система, на которой я должен разрабатывать, имеет это ограничение.
Моя идея состоит в том, чтобы создать структуру, которая содержит полное представление и обрабатываемую целую и дробную часть. И после создания структуры либо только с полученным двоичным представлением, либо с целыми и дробными значениями должна быть функция, которая выполняет преобразование.
Обновление:
Мой вопрос кажется недостаточно точным, поэтому я добавлю некоторые детали.
В моем коде я должен создавать и получать числа в определенном представлении с фиксированной точкой. Как описано в ответах ниже, это не что иное, как указатель на последовательность битов. Моя проблема в том, что я должен создать эту последовательность битов при отправке или интерпретировать ее при получении информации.
Это преобразование - моя проблема с игнорированием знака, это легко сделать, когда вы можете использовать число с плавающей запятой для преобразования (код не тестировался, но должен работать так):
float sourceValue = 12.223445;
int intPart = 0;
float fractPart = 0.0;
//integer part is easy, just cast it
intPart = (int)sourceValue;
//the fractinoal part is the rest
fractPart = sourceValue - intPart;
//multipling the fract part by the precision of the fixed point number (Q9.25)
//gets us the fractional part in the desired representation
u_int64_t factor = 1;
factor = factor << 25;
u_int64_t fractPart = fractPart * factor;
Остальное можно сделать с помощью некоторого сдвига и использования логических битовых операторов.
Но как я могу сделать это без поплавка посередине, начиная с чего-то вроде этого:
int intPart = 12;
int fractPart = 223445;
Это вообще возможно? Как говорится, я тут как бы застрял.
Спасибо за вашу помощь!