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

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с ответами на Ваш вопрос: C++. Типы данных. Создание типа данных.
спросили в Stdio h String h
Как правильно задать одномерный массив в C++?
Понравился ответ Krab в ветке комментов.

Справедливости ради отмечу, что в плюсах для
подробнее...

Как в C++ округлить число до целого, чтобы его можно было записать в переменную типа int?
int a=b+.5;
Число при присваивании автоматически приводится к целому, дробная часть
подробнее...
спросили в C C Catch
для чего в C# нужен оператор Parse?
В C# оператора Parse нет.
Многие типы (классы) имеют статический метод Parse, который
подробнее...
спросили в Вводить
Оператор ввода в C#
Для ввода используются

Console.Read();
Console.ReadLine();

Первый считывают
подробнее...

Зачем и для чего нужен тип данных bool в C++? Пожалуйста, объясните развёрнутым ответом. Заранее спасибо.
bool - Логический тип. В памяти занимает всего 1 байт. Может иметь всего два состояния - (true
подробнее...
Ответ от 3 ответа[гуру]
Привет! Вот еще темы с похожими вопросами:
спросили в Shadrinsk
Как применить тип String в switch в C++
А теперь маленький урок грамматики: надо ставить все знаки препинания, большие буквы и т. д. Знаешь
подробнее...

про scanf в c++
Типа "любое число" в С и C++ нет. Буква в спецификаторе формата указывает, в каком формате (то есть
подробнее...

Что такое ООП по простому? Что такое ООП по простому?
Это классно =)
Например есть у тебя коробка а в ней дохера вещей
вот как бы описали
подробнее...
спросили в Другое
В каких случаях вкалывают инсулин?
по правильному то вообше как врач приписал
Начало практического применения инсулина почти 85
подробнее...
спросили в Железо
HTC Desire C (PL01100) настройка MMS
"P.S. Ответы типа в телефон не писать:) "

После этого так и захотелось
подробнее...
спросили в Техника Кратность
Автоматы C25 и B25, в чем разница??
С и В это время-токовая характеристика автоматического выключателя определяет время срабатывания
подробнее...
спросили в Randomness Stdio h
C++: И снова передача двумерных массив в функцию.. . каким макаром это сделать?
Объясняю: массив - это ряд одинаковых значений (нет, я не Очевидность 🙂 ). Имя массива в C/C++
подробнее...

Что в языке C++ означает знак процента (%). Например, как он действует в данной программе? Желательно поподробней.
В данном случае операция получения остатка от деления целых. Подробнее некуда.
Вообще же один
подробнее...
Типы данных в C на Википедии
Посмотрите статью на википедии про Типы данных в C
 

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

Имя*

E-mail:*

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