Как я могу хранить 2 числа в 1-байтовом символе?

У меня вопрос о названии, но если нет, то как мне избежать использования только 4 битов для представления целого числа?

РЕДАКТИРОВАТЬ действительно мой вопрос, как. Я знаю, что в языке типа c существует 1-байтовая структура данных, но как я могу использовать что-то вроде char для хранения двух целых чисел?

1

Решение

Вы можете хранить два 4-битных числа в одном байте b который является неподписанным символом).

Используя hex легко увидеть, что: в b=0xAE два числа А и Е.

Используйте маску, чтобы изолировать их:

a = (b & 0xF0) >> 4

а также

e = b & 0x0F

Вы можете легко определить функции для установки / получения обоих чисел в соответствующей части байта.

Примечание: если 4-битные числа должны иметь знак, все может стать немного сложнее, так как знак должен быть правильно расширен при упаковке / распаковке.

5

Другие решения

В 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. Это проще использовать, чем ручное смещение битов и маскирование, используемые в другом ответе, но это скорее всего не быстрее

5