тип данных c



типы в 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 или ассемблер.

Ответ от Moro-ZOI[активный]
Можно. Скачайте себе учебное пособие по С++ или другую учебную литературу по программированию в интернете её полно. Типизация данных это один из основных вопросов в программировании. Ответ вы найдёте в любом учебнике по программированию на языке С++.

Ответ от Bob[гуру]
Байтовую адресацию памяти ещё никто не отменял. Нельзя сохранить в памяти биты, можно только байты, которые потом транслировать в биты. По-моему так. А следовательно, зачем изобретать велосипед?

Ответ от 22 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: C++. Типы данных. Создание типа данных.
Типы данных в C на Википедии
Посмотрите статью на википедии про Типы данных в C
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*