Поскольку один байт равен 8 битам, вы можете легко разделить его на меньшие диапазоны значений. Крайний предел этого - когда у вас есть 8 однобитных целых чисел, которые называются битовым полем.
Если вы хотите хранить два 4-битных целых числа (которые дают вам 0-15 для каждого), вам просто нужно сделать это:
value = a * 16 + b;
Пока вы будете правильно проверять границы, вы никогда не потеряете здесь никакой информации.
Чтобы вернуть два значения, вам просто нужно сделать это:
a = floor(value / 16)
b = value MOD 15
MOD - это модуль, это «остаток» от деления.
Если вы хотите сохранить четыре 2-битных целых числа (0-3), вы можете сделать это:
value = a * 64 + b * 16 + c * 4 + d
И, чтобы вернуть их:
a = floor(value / 64)
b = floor(value / 16) MOD 4
c = floor(value / 4) MOD 4
d = value MOD 4
Я оставляю последнее деление в качестве упражнения для читателя;)