У меня вопрос о названии, но если нет, то как мне избежать использования только 4 битов для представления целого числа?
РЕДАКТИРОВАТЬ действительно мой вопрос, как. Я знаю, что в языке типа c существует 1-байтовая структура данных, но как я могу использовать что-то вроде char для хранения двух целых чисел?
Вы можете хранить два 4-битных числа в одном байте b
который является неподписанным символом).
Используя hex легко увидеть, что: в b=0xAE
два числа А и Е.
Используйте маску, чтобы изолировать их:
a = (b & 0xF0) >> 4
а также
e = b & 0x0F
Вы можете легко определить функции для установки / получения обоих чисел в соответствующей части байта.
Примечание: если 4-битные числа должны иметь знак, все может стать немного сложнее, так как знак должен быть правильно расширен при упаковке / распаковке.
В C или C ++ вы можете использовать struct
выделить требуемое количество бит для переменной, как указано ниже:
#include <stdio.h>
struct packed {
unsigned char a:4, b:4;
};
int main() {
struct packed p;
p.a = 10;
p.b = 20;
printf("p.a %d p.b %d size %ld\n", p.a, p.b, sizeof(struct packed));
return 0;
}
Выход p.a 10 p.b 4 size 1
, показывая, что p
для хранения требуется только 1 байт, и что числа с более чем 4 битами (больше 15) усекаются, поэтому 20 (0x14) становится равным 4. Это проще использовать, чем ручное смещение битов и маскирование, используемые в другом ответе, но это скорее всего не быстрее