Вопрос, конечно, забавный, но несколько глупый. «Запаковывания» не получится, так как сам по себе float подразумевает некоторое использование информации для передачи как раз таки «дробности».
Вообще, всё несколько сложнее. Вообще, sizeof различных данных бывает разным для разных языков, компиляторов и даже систем. Так, что понимать под целочисленными данными? Так, byte, char, short, int, long — все являются целочисленными (в С++ вообще всё довольно сложно с типами данных, существует большое количество не всегда логичных алиасов). Гораздо проще говорить в таком случае об (u)int8, (u)int16, и т.д. При этом sizeof(int) = 4, как и у float для большинства систем. Имеется ввиду int32.
Так, 9 бит информации уйдут только на запись знака числа и его степени (и если не соблюдать эту структуру, число можно и, пожалуй, следует трактовать совсем по-другому). В этом плане те же 4 байта информации гораздо сподручнее представить как просто 3 числа, слепленные вместе. Проблема лишь в том, что 4 байта — слишком малое количество информации, где можно было бы вовсю развернуться и попытаться определить длину каждого из чисел в битах/байтах по данным в начале. Хотя можно попробовать.
Смотри. Четыре байта это, как бы это очевидно не звучало, 4 подряд идущих байта. Один байт — 8 бит, каждый из которых имеет значение 0 или 1. В двоичной системе счисления максимальное число, которое можно засунуть в байт это 1111'1111. Что в десятичной системе счисления будет равно 255. Каждый бит может быть в двух состояниях: 0 или 1. всего битов 8. По простейшей комбинаторной формуле число полных переборов для двоичного числа из 8 знаков составит 2[SUP]8[/SUP] = 256 (а равно 255, потому что 0 — тоже число, и с него начинается отсчёт; таким образом, чисел 256).
Обычно для сжатия подобной записи числа пишут в шестнадцатеричной системе счисления. Я не зря отделил первые четыре единички. 2[SUP]4[/SUP] = 16. В шестнадцатеричной системе счисления 16 является «десяткой», значением перехода на следующий порядок. Так как у цифр для этого «нет слов», то после 10 идут A, B, C, D, E и F. И так 16[SUB]10[/SUB] = 1111'1111[SUB]2[/SUB] = F'F[SUB]16[/SUB].
Один байт, таким образом, вмещает в себя максимальное числе 255[SUB]10[/SUB] которое, для краткости, запишем в виде F'F[SUB]16[/SUB]. У нас же четыре байта, что вмещает в себя число F'F'F'F'F'F'F'F[SUB]16[/SUB]. Что равно 4294967295[SUB]10[/SUB].
Так что, очень сильно извратившись, можно побитово считывать х'х'х'х'х'х'х'х, где первые два числа определённой длины будут указывать максимальную длину. В любом случае, в памяти это будет лишь, по сути, присоединенные друг к другу числа. И именно таким образом можно передать максимальные значения. Допустим, 32 единцы-нолика, если поделить их пополам, дадут 16. Предположим, что-то около этого будет максимальной длиной передаваемого числа. Тогда резервируем первые две F-ки (или байт, или два числа с максимумом в 15, или одно с максимумом в 255) под «разрезы», допустим, 7й бит и 3й (+7). Ну и ещё можно учитывать смещение от первого байта.
Ну и получится: 0111 (7), 0011 (3), 0ххх'хххх [7], 0ххх [3], [всё, что осталось, что, по сути, равно 32 - 4 - 4 - 7 - 3 = 14]. Учитывая такой расклад, в трёх байтах можно будет уместить максимально числа:
0111'1111[SUB]2[/SUB] = 7'F[SUB]16[/SUB]= 127[SUB]10[/SUB];
0111[SUB]2[/SUB] = 7[SUB]16[/SUB] = 7[SUB]10[/SUB];
0011'1111'1111'1111[SUB]2[/SUB] = 3'F'F'F[SUB]16[/SUB] = 16383[SUB]10[/SUB].
А суммарно это всё будет выглядеть, логично, так: 0111'0011'xxxx'xxx
x'xxxx'xxxx'xxxx'xxxx, что, при подстановке максимальных значений превратится в 0111'0011'1111'111
1'1111'1111'1111'1111[SUB]2[/SUB] = 7'3'F'F
'F'
F'F'F[SUB]16[/SUB]= 1946157055[SUB]10[/SUB]. Вот такая вот порнография.
В любом случае, это совершенно непонятное дрочево (и ради чего?). Так-то ты, конечно, сегодня много чего нового узнал, но это не отвечает на вопрос. Использование же математических формул, вывод множителей в первые байты, перестановки их и прочее больше похоже на шифрование или хеширование и вряд ли так просто даст результат лучше (опять же, всё зависит от краевых условий, и тут больше к вопросу строгого математического доказательства). К слову, если хочешь действительно «упаковать» что-то, тебе, вероятно, стоит с оным познакомиться. А раз нет задачи — нет и решения.