типы в c
Автор Dark Wanderer задал вопрос в разделе Другие языки и технологии
C++. Типы данных. Создание типа данных. и получил лучший ответ
Ответ от Diana Kim[активный]
Минимальная граница для адресации процессора - 1 байт. Рекоммендуемая - 4 байта.
Если нужна скорость, создаете тип как структуру с массивом из unsigned int (размер массива - количество битов, деленное на 32, с округлением в большую сторону, тогда 5 бит и 10 бит будут занимать в памяти 32 бита)
Если нужна экономия памяти, то создаете структуру с массивом из unsigned char (в этом случае 5 бит будет занимать в памяти 8, а 10 - 16 бит)
Упаковать несколько различных типов в структуру можно указав количество занимаемых бит, например:
struct Status
{
bool Ready : 1;
bool Errorl : 1;
unsigned int LastOperationCode : 4 ;
unsigned int ErrorCode : 4;
}
Есть еще один вариант, если Вам действительно нужна самая максимальная экономия памяти (например, огромнейшие массивы данных или минимальное количество памяти как в микроконтроллерах). Естественно, в этом случае тип для еденичного элемента будет таким же, как и в первом случае - массив из байтов или двойных слов. Однако, для массива таких элементов надо будет создать свой собственный тип данных.
class Bitarray
{
private:
unsigned char *Array;
}
Определить в нем конструктор, резервирующий память для массива (например, для случая 5-байтного типа) :
Bitarray::Bitarray( int size )
{
Array = (unsigned char*)malloc(1+size*5/8);
}
А также функции для чтения и записи
unsigned char Bitarray::Get(int index)
{
int ba = index*5/8;
return ((Array[ba]>>(index*5-ba*8)) | (Array[ba+1] << ((ba+1)*8-index*5)) & 31;
}
Запись - аналогично. Ну и так далее и тому подобное. Идея, надеюсь, понятна.
Про создание собственных типов - почитайте Bjarne Stroustrup "The C++ Programming Language", там есть немного про создание битовых полей и описание необходимых операций (например, для извлечения битовых частей из переменной).
Более подробно про битовые поля наверное будет написано в книжках про C или ассемблер.
Можно. Скачайте себе учебное пособие по С++ или другую учебную литературу по программированию в интернете её полно. Типизация данных это один из основных вопросов в программировании. Ответ вы найдёте в любом учебнике по программированию на языке С++.
Байтовую адресацию памяти ещё никто не отменял. Нельзя сохранить в памяти биты, можно только байты, которые потом транслировать в биты. По-моему так. А следовательно, зачем изобретать велосипед?