Разное

Типы данных вещественные c: С | Типы данных


Содержание


Типы данных

Тип данных характеризует основные свойства данных: возможные
действия с данными, их внутреннее представление, диапазон допустимых
значений, размер.

Все типы данных условно можно подразделить на простые (обычно это
встроенные типы) и структурированные (структуры, классы).

В языке C# все
простые типы и структуры относятся к значащим
типам
(в переменных таких типов
непосредственно хранятся значения данных соответствующих типов), а
классы — к ссылочным типам.
Память для переменных значащих типов выделяется в стеке, для
ссылочных объектов — в «общей куче» (heap).
Работа со стековой памятью ведётся
значительно быстрее, чем с памятью в heap.
Память под объекты в «куче»
выделяется с помощью операции new,
а вот освобождать такую память в программе
не требуется, так как этим занимается специальная программа —
«сборщик мусора». Причём, освобождает ненужную память эта
программа не сразу, а через некоторое время, руководствуясь своим
особым алгоритмом, повлиять на который программист не может.

Рассмотрим подробнее простые типы, к которым относятся целые типы,
вещественные, символьные, логические, но предварительно обратим
внимание на одну особенность языка C#.

Встроенные типы языка C# имеют
фиксированный размер, определённый стандартом языка. В отличие от
языков C/C++, в которых, например, тип int
зависит от разрядности операционной системы и компилятора, в
языке C# размер типов не зависит от
платформы.

Целые типы

Целые типы данных предназначены для хранения целых чисел. Все
целые типы можно подразделить на знаковые и беззнаковые.

В таблице ниже приведены все знаковые
целые типы
и их основные характеристики:







Тип


Размер, байт


Диапазон допустимых значений


sbyte


1


-128 … 127


short


2


-32768 … 32767


int


4


-2147483648 …
2147483647


long


8


-9223372036854775808 …
9223372036854775807

Примеры
объявления переменных целых знаковых типов:


sbyte y;    short
t;    int x;    long r;

А в этой таблице
приведены все беззнаковые типы данных:







Тип


Размер, байт


Диапазон допустимых значений


byte


1


0 … 255


ushort


2


0 … 65535


uint


4


0 … 4294967295


ulong


8


0 …
18446744073709551615

Примеры
объявления переменных целых беззнаковых типов:


byte a;    ushort
b;    uint k;    ulong j;

Для целых типов
допустимы следующие группы операций:


  • арифметические операции;


  • побитовые операции;


  • операции сравнения;


  • автоувеличение и автоуменьшение.

Возможно
автоматическое преобразование от менее мощного к более мощному типу,
но не наоборот.

Например:


int i = 3;


short k = 2;


i = k;         //
это допустимо


k = i;         //
так нельзя, будет сообщение об ошибке


k = (short) i; //а так
можно — выполняем явное преобразование

Вещественные типы

Для работы с действительными числами в языке C#
имеется два вещественных типа: float
(одинарная точность) и double
(удвоенная точность). Приведем краткую
характеристику этих типов:





Тип


Размер, байт


Диапазон возможных


значений (по модулю)


Точность (количество


десятичных цифр)


float

4

10-45
… 1038

7


double

8

10-324 … 10308

15

Примеры
объявления переменных вещественных типов:


float x;    double
y;

Для вещественных
типов допустимы следующие группы операций:


  • арифметические операции;


  • операции сравнения;


  • автоувеличение и автоуменьшение.

Тип decimal

Этот тип специально создан для выполнения денежных расчётов.
Обеспечивает точность до 29 десятичных цифр (деньги любят счёт!).
Диапазон возможных значений (по модулю) от 10-28 до 1028.
Под переменные этого типа отводится 16 байт. Пример объявления
переменной этого типа:


decimal m;

Символьный тип

Для хранения отдельных символов используется тип char.
Так как в языке C# для кодирования
символов используется Unicode,
то под каждый символ отводится 2
байта. Пример объявления переменной этого типа:


char c;

Логический (булевый) тип

Для работы с логическими величинами используется тип bool.
Допустимы два значения: true
(истина) и false
(ложь). Пример объявления переменной логического типа:


bool p;

Для данных
логического типа допустимы операции проверки на равенство и
неравенство.

Следует иметь ввиду, что для булевого типа в C#
запрещены какие-либо преобразования в целые типы.



Типы данных

Все типы данных в языка C# являются производными базового класса Object, и, таким образом, наследуют все его члены. Описание класса Object содержится в пространстве имен System. Класс Object обладает статическими методами:

  • Equals(Object, Object) проверяет равенство двух указанных экземпляров объектов, возвращает логическое значение.
  • ReferenceEquals(Object, Object) проверяет, являются ли переданные объекты одним и тем же объектом, возвращает логическое значение.


К нестатическим методам класса Object относятся

  • Equals(Object) – вызывается для конкретного экземпляра и проверяет равенство этого экземпляра объекту, переданному в качестве аргумента, возвращает логическое значение.
  • Finalize() – пытается освободить ресурсы памяти, занимаемые объектом.
  • GetHashCode() – генерирует хэш-код для объекта.
  • GetType() – возвращает тип текущего объекта.
  • MemberwiseClone() – создает еще один объект того же типа и копирует в него все данные нестатических полей текущего объекта.
  • ToString() – преобразует объект к строковому представлению.

Все типы данных C#, унаследованные от класса Object, можно разделить на:

  • Простые данные – для использования данных таких типов достаточно указать только имя переменной или величину константы. К ним относятся логические значения, целые и вещественные числа, а также символьные значения.
  • Агрегирующие данные – данные, содержащие внутри себя несколько значений полей. К ним относятся массивы, перечисления, структуры, классы.

Другое деление типов данных на

  • Базовые, или встроенные – это типы данных, которые содержатся в стандарте языка. К ним относятся простые базовые типы, а также строковый тип string.
  • Библиотечные – это типы, которые содержатся в библиотеках, обычно .NET Framework. Чтобы использовать библиотечные типы данных необходимо знать их поля и методы, а также пространство имен, в котором они описаны.
  • Пользовательские – определенные программистом.

В таблице перечислены встроенные типы языка C#, их размер и диапазон представления.

Тип данныхПсевдоним
.NET Framework
Размер, байтДиапазон
byteSystem.Byte1-128…127
sbyteSystem.SByte10…255
shortSystem.Int162-32768…32767
ushortSystem.UInt1620…65535
intSystem.Int3242 147 483 648 … 2 147 483 647
uintSystem.UInt3240 … 4 294 967 295
longSystem.Int648-9 223 372 036 854 775 808 …
9 223 372 036 854 775 807
ulongSystem.UInt6480 … 18 446 744 073 709 551 615
boolSystem.Boolean1True, False
floatSystem.Single4±1,5×10−45 … ±3,4 × 1038
doubleSystem.Double8±1,5×10−45 … ±3,4 × 1038
decimalSystem.Decimal16±1,0×10−28 … ±7,9 × 1028
charSystem.Char2Символ Юникода
stringSystem.StringСтрока символов Юникода

Все перечисленные типы, за исключением string, являются простыми.

Поскольку C# является языком со строгой типизацией данных, любая переменная перед ее использованием должна быть объявлена. Причем область видимости переменной ограничивается пространством имен, в котором она объявлена.

Для объявления переменных используется следующий синтаксис.
Без инициализации

С инициализацией

Если необходимо объявить несколько переменных одного типа, то они могут быть записаны после названия типа через запятую.

Если переменная объявлена без инициализации, ей присваивается значение по умолчанию, равное 0.

Целочисленные данные

Встроенные типы данных языка C# включают 1-байтное, 2-байтное, 4-байтное и 8-байтное представление целочисленных данных в знаковой и беззнаковой форме.

Для знаковой формы представления старший разряд числа отводится под хранение его знака, поэтому диапазон представления значащей части чисел со знаком в 2 раза меньше, чем для беззнаковых.
Для инициализации целочисленных данных чаще всего используются целочисленные константы, записанные с помощью цифр десятичной или шестнадцатеричной системы счисления. Шестнадцатеричная константа начинается с символов 0x или 0X. Для отрицательных констант используется предшествующий символ ю

Пример объявления целочисленных переменных:

Все целочисленные данные имеют константные поля MaxValue и MinValue, содержание максимальное и минимальное значения, которые могут быть представлены данными соответствующего типа.

Логические данные

Логические данные представлены логическим типом bool. Несмотря на то, что данные логического типа могут принимать только одно из двух значений True или False, объем памяти, отводимый для хранения логических переменных составляет 1 байт.

Вещественные данные


Представление вещественных данных представляет собой диапазон, симметричный относительно нуля.
При выполнении операций с плавающей точкой не создаются исключения, а в исключительных ситуациях возвращается 0 (в случае слишком маленького значения), бесконечность PositiveInfinity (в случае большого положительного значения) или NegativeInfinity (в случае большого по величине отрицательного значения) или нечисловое значение (NaN) если операция с плавающей точкой является недопустимой.
Для инициализации вещественных чисел могут использоваться константы. Вещественное число состоит из знака, целой части, дробной части и порядка числа. В качестве разделителя целой и дробной части в тексте программы используется точка. Порядок числа представляет собой степень 10, на которую следует умножить значащую часть вещественного числа.
Примеры объявления вещественных констант

Представление вещественного числа со знаком включает в себя целую часть, дробную часть и порядок числа.

По умолчанию все вещественные константы имеют тип double. Если последним символом константы указан суффикс f или F, константа имеет тип float. Если последним символом константы указан суффикс m или M, константа имеет тип decimal.

В силу особенностей представления вещественных чисел в разрядной сетке вычислительной машины, при работе с вещественными числами могут возникнуть проблемы, связанные с точностью их представления. Наименьшее целое вещественное число, которое может быть представлено в разрядной сетке float или double определяется константным полем Epsilon этих типов.

Тип decimal обладает более точным и узким диапазоном по сравнению с типами float и double, и поэтому больше подходит для использования в финансовых расчетах.

Символьные данные


Символьная переменная представляет собой 2-байтное значение типа char, являющееся символом таблицы Юникод. Для инициализации символьных данных могут использоваться константы следующих типов

Все символьные представления констант заключаются в апострофы ».

Строковые данные

Несмотря на то, что строковый тип данных не является простым, он является встроенным типом языка C#. Строковый тип данных string позволяет создавать строки любой длины, для инициализации которых используется последовательность символов, заключенная в кавычки «…».
Тип данных string также содержит ряд методов для обработки строковых данных.

Закрепить использование базовых типов данных Вы можете в разделе Типы данных
курса Алгоритмика

Автор: Вставская Елена Владимировна

 
Написать комментарий:

Типы данных (для новичков) — Структура языка программирования

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

Классификация типов данных

Изначально, типы данных делятся на простые и составные. Простой — это тип данных, объекты (переменные или постоянные) которого не имеют доступной программисту внутренней структуры. Для объектов составного типа данных, в противовес простому, программист может работать с элементами внутренней его структуры.

Числовой тип данных разработан для хранения естественно чисел. Символьный — для хранения одного символа. Логический тип имеет два значения: истина и ложь. Перечислимый тип может хранить только те значения, которые прямо указаны в его описании.

Для простых типов данных определяются границы диапазона и количество байт, занимаемых ими в памяти компьютера.

В большинстве языков программирования, простые типы жестко связаны с их представлением в памяти компьютера. Компьютер хранит данные в виде последовательности битов, каждый из которых может иметь значение 0 и 1. Фрагмент данных в памяти может выглядеть следующим образом

00011011011100010110010000111011 ...

Данные на битовом уровне (в памяти) не имеют ни структуры, ни смысла. Как интерпретировать данные, как целочисленное число, или вещественное, или символ, зависит от того, какой тип имеют данные, представленные в этой и последующих ячейках памяти.

Числовые типы данных

Целочисленные типы данных

Выделяют знаковые и беззнаковые. Как видно из названия, знаковые предназначены для хранения как положительных, так и отрицательных значений, нуль, а беззнаковые — чисел, не меньше нуля.

Беззнаковые типы данных, в отличии от соответствующих знаковых, имеют в два раза больший диапазон. Это из-за их машинного представления. В знаковых типах первый бит указывает на знак числа: 1 — отрицательное, 0 — положительное.

Исходя из машинного представления целого числа, в ячейке памяти из n бит может хранится 2n для беззнаковых, и 2n-1 для знаковых типов.

Рассмотрим теперь конкретные целочисленные типы в трёх языках.

ТипРазрядность в битахДиапазон чисел
byte80 — 255
sbyte8-128 — 127
short16-32 768 — 32 767
ushort160 — 65 535
int32-2 147 483 648 — 2 147 483 647
uint320 — 4 294 967 295
long64-9 223 372 036 854 775 808 — 9 223 372 036 854 775 807
ulong640 — 18 446 744 073 709 551 615
ТипРазрядность в битахДиапазон чисел
unsigned short int / unsigned short160 — 65 535
short int16-32 768 — 32 767
unsigned long int / unsigned long320 — 4 294 967 295
long int / long32-2 147 483 648 — 2 147 483 647
int (16 разрядов)16-32 768 — 32 767
int (32 разряда)32-2 147 483 648 — 2 147 483 647
unsigned int (16 разрядов)160 — 65 535
unsigned int (32 разряда)320 — 4 294 967 295

У некоторых типов есть приписка «16 разрядов» или «32 разряда». Это означает, что в зависимости от разрядности операционной системы и компилятора данный тип будет находится в соответствующем диапазоне. По-этому, рекомендуется не использовать int, unsigned int, а использовать их аналоги, но уже жестко определенные, short, long, unsigned short, unsigned long.

ТипРазрядность в битахДиапазон чисел
byte8-128 — 127
short16-32 768 — 32 767
int32-2 147 483 648 — 2 147 483 647
long64-9 223 372 036 854 775 808 — 9 223 372 036 854 775 807

В Java нет беззнаковых целочисленных типов данных.

Вещественные типы данных

Числа вещественного типа данных задаются в форме чисел с плавающей запятой.

Плавающая запятая — форма представления действительных чисел, в которой число хранится в форме мантиссы и показателя степени.p \end{equation}

где N — записываемое число;
M — мантисса;
p (целое) — порядок.
Например: 14441544=1,4441544*107; 0,0004785=4,785*10-4. Компьютер же на экран выведет следующие числа:

Следовательно, в отведенной памяти хранится мантисса и порядок записываемого числа. Рассмотрим на примера типа данных, который хранится в 8 байтах или 64 битах. В данном случае, мантисса составляет 53 бита: 1 для знака числа и 52 для её значения; порядок 10 битов: 1 бит для знака и 10 для значения. Мы можем в данном случае говорить о диапазоне точности, то есть насколько малое и насколько большое число может хранить данный тип данных: 4,94×10−324 до 1.79×10308. Но, поскольку, память компьютера не безразмерна, да и далеко не всегда нужно, храниться несколько первых разрядов мантиссы, которые называются значащими.

Вывод: вещественные типы данных, в отличии от целочисленных, характеризуются диапазоном точности и количеством значащих разрядов.

Рассмотрим конкретные типы данных в наших трёх языках.

ТипРазрядность в битахКоличество значащих цифрДиапазон точности
float327от 1,5*10-45 до 3,4*1038
double6415от 4,9*10-324 до 1,7*10308
decimal12828от 1,0*10-28 до 7,9*1028

Тип decimal создан специально для операций высокой точности, в частности финансовых операций. Он не реализован как примитивный тип, по-этому его частое использование может повлиять на производительность вычислений.

ТипРазрядность в битахКоличество значащих цифрДиапазон точности
float327от 1,5*10-45 до 3,4*1038
double6415от 4,9*10-324 до 1,7*10308
ТипРазрядность в битахКоличество значащих цифрДиапазон точности
float327от 1,5*10-45 до 3,4*1038
double6415от 4,9*10-324 до 1,7*10308

Символьный тип данных

Значение переменной этого типа данных представляет собой один символ. В действительности, это есть целое число. В зависимости от кодировки, это число превращается в некий символ. Данные типы данных характеризуются лишь размером выделяемой под них памяти.

ТипРазрядность в битах
char16
ТипРазрядность в битах
char8
wchar_t16
ТипРазрядность в битах
char16

Логический тип данных

Это тип данных, значения которых могут быть: true (правда) или false (ложь). Логическому типу данных соответствуют в С# и C++ тип bool, в Java — boolean.

Перечислимый тип данных

Во внутреннем представлении, это целочисленный тип данных, только здесь пользователь вместо числе использует заранее определенные строковые значения.

Чтобы прочувствовать эту концепцию, приведем пример на языке С++ (в С# и Java аналогично)

enum Forms {shape, sphere, cylinder, polygon};

Теперь переменные перечислимого типа Forms могут принимать лишь значения, определенные в примере кода. Это очень удобно, ведь мы уже оперируем не с числами, а с некими смысловыми значениями, замечу лишь, что для компьютера эти значения всё-равно являются целыми числами.

Массив

Далее перейдем к сложным типам данных. Первый из них — это массив. Массив — это набор однотипных переменных, расположенных в памяти непосредственно друг за другом, доступ к которым осуществляется по индексу. Индекс массива — целое число, указывающее на конкретный элемент массива.

Каждый массив характеризуется типом данных его элементов, который может быть как простым, так и сложным, то есть любым.

В языках программирования нельзя оперировать всем массивом, работают с конкретным элементом. Чтобы доступиться до него в трёх рассматриваемых нами языках используют оператор «[]».

Индекс имеет тип данных чаще всего int.

Структура

Ранее были рассмотрены встроенные типы данных. Теперь мы переходим к пользовательским типам данных. Структура — конструкция, позволяющая содержать в себе набор переменных различных типов.

Структуры реализованы в языке программирования, чтобы собрать некие близки по смыслу вещи воедино.

Например, есть колесо автомобиля. У колеса есть диаметр, толщина, шина. Шина в свою очередь является структурой, у которой есть свои параметры: материал, марка, чем заполнена. Естественно, для каждого параметра можно создать свою переменную или константу, у нас появится большое количество переменных, которые, чтобы понять к чему они относятся, нужно в именах общую часть выделять. Имена будут нести лишнюю смысловую нагрузку. Получается запутанная история. А так мы определяем две структуры, а затем параметры в них.

struct Tyre
{
   Material material;
   int mark;
};
struct Wheel
{
   double diameter;
   double thickness;
   Tyre tyre;
}

Класс

Еще одним пользовательским типом данных является класс. Класс умеет всё, что и структура, но кроме параметров, у него есть и методы, и поддерживает большое количество вещей, связанных с объектно-ориентированным программированием.

C Урок 4. Переменные и типы данных. Часть 1 |

&nbsp

&nbsp

&nbsp

Продолжаем освоение языка C.

И теперь пришло время познакомиться с типами данных, а также способами их представления, одним из которых являются переменные. Также есть ещё константы, но с ними мы будем знакомиться немного позже.

С типами данных мы уже частично познакомились, когда выводили данные различного типа напрямую в консоль посредством функции printf, не задавая их заранее и никак не преобразовывая. Конечно же, можно делать и так, но какой прок от программы, которая просто выводит данные, никак их не обрабатывая и ничего с ними не делая, это не совсем хорошо. Ведь на то он и процессор, чтобы заниматься какой-то автообработкой, а наша программа должна как-то его на это натолкнуть.

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

Прежде чем приступить к переменным, мы познакомимся с типами данных, являющимися самой главной основой переменных, так как переменная всегда несёт в себе и представляет какой-то определённый тип.

Данные различного типа – это величины, которые располагаются в каком-то месте памяти и могут занимать в ней различное количество пространства.

Типы данных можно разделить условно на три группы:

  1. целые – данные целого типа,
  2. вещественные – данные, которые могут иметь дробную часть,
  3. символы – данные типа char, которые представляют собой какой-то символ и занимают в памяти всего один байт.

Рассмотрим первый тип. Данные целого типа могут быть различной величины, следовательно будут иметь разный возможный диапазон значений, а также занимать различное количество байт в памяти. Также данные этого типа могут быть знаковыми (возможно отрицательное значение) или беззнаковыми (не меньше нуля).

Рассмотрим, какие бывают данные целого типа (в принципе char тоже можно считать целым типом малой величины, так как зачастую его используют в этом качестве, когда хотят оперировать малыми значениями, чтобы сэкономить память, так как они занимают в ней всего один байт).

Данная таблица, думаю, всё это расскажет:

 

ТипКоличество битДопустимый диапазон
char8-128 … 127
unsigned char80 … 255
short
16-32 768 … 32767
unsigned short
160 … 65535
int
32-2 147 483 648 … 2 147 483 647
unsigned int
320 … 4 294 967 295
long32-2 147 483 648 … 2 147 483 647
unsigned long320 … 4 294 967 295
long long
64

-9 223 372 036 854 775 808 …

9 223 372 036 854 775 807

unsigned long long640 … 18 446 744 073 709 551 615

 

Аналогичным образом ведёт себя и вещественный тип. Только представители данного типа могут иметь ещё некоторые свойства. Кроме того, что они тоже занимают в памяти каждый определенное количество байт и имеют диапазоны, они могут быть представлены ещё в нормированной форме – в виде числа, умноженного на 10 в определённой степени. Также данный вид представления называют экспоненциальной записью числа.

Например, число 135.543 можно представить как 1,35543 . 102.

А, например, число 0.00001245 – как 1.245 . 10-5.

Первый множитель – это мантисса или значащее число, а степень десятки – это экспонент или показатель, но чаще всего употребляется слово порядок, так как степень у нас именно десяти.

В коде мы так написать не можем, в исходном коде первое число будет выглядеть как 1.35543E2, а второе 1.245E-5.

Мы не будем сейчас вдаваться в подробности, как именно хранится вещественное число в ячейке памяти. Вообще, тема интересная, но в принципе, сейчас она нам особой пользы не принесёт.

Также посмотрим таблицу диапазонов и размера занимаемой памяти определённых вещественных типов

 

ТипКоличество битДопустимый диапазон
float32-2 147 483 648.0 … 2 147 483 647.0
double64

-9 223 372 036 854 775 808 .0 …

9 223 372 036 854 775 807.0

long double
64

-9 223 372 036 854 775 808 .0 …

9 223 372 036 854 775 807.0

 

В некоторой документации пишут, что последний тип занимает 80 бит в памяти. Пока не знаю, где правда, возможно это зависит от операционных систем, либо от каких-то стандартов, либо от компилятора. С этим, думаю, разберёмся позже, когда будем писать исходные коды, отлаживать их и смотреть результаты в дизассемблированном виде.

Про символьный тип говорить особо нечего, так как он в группе только один. Занимает он один байт в памяти.

Ещё существует тип данных bool. Это целочисленный тип данных, так как диапазон допустимых значений — целые числа от 0 до 255. Данный тип используется как логический тип данных исключительно для хранения результатов логических выражений. У логического выражения может быть один из двух результатов – true или false. true — если логическое выражение истинно, false — если логическое выражение ложно. Данный тип может отсутствовать в некоторых компиляторах вообще, тогда мы используем вместо него char либо unsigned char.

Думаю, что для первоначального знакомства с типами данных пока нам достаточно. С остальными тонкостями будем разбираться в процессе дальнейшего изучения языка по мере поступления вопросов.

Теперь о переменных.

Переменные существуют для хранения значений и величин определённых типов данных в памяти.

Для того, чтобы к этим значениям было удобно обращаться, у переменной существует имя. Это наподобие как и у людей, когда они для идентификации друг друга обращаются также по именам.

Самое основное требование для объявления переменной: переменная должна быть объявлена раньше, чем она будет использоваться.

 

 

Самый простой способ объявления переменной в коде следующий:

 

char symbol1;

 

Сначала мы указываем тип данных, который будет в себе нести наша переменная, а далее мы указываем имя нашей переменной.

Имя переменной должно быть уникальным, то ес

Размер типов данных в C++ | Уроки С++

  Обновл. 2 Сен 2020  | 

Как мы уже знаем из урока №28, память на современных компьютерах, как правило, организована в блоки, которые состоят из байтов, причем каждый блок имеет свой уникальный адрес. До этого момента, память можно было сравнивать с почтовыми ящиками (с теми, которые находятся в каждом подъезде), куда мы можем поместить информацию и откуда мы её можем извлечь, а имена переменных — это всего лишь номера этих почтовых ящиков.

Тем не менее, эта аналогия не совсем подходит к программированию, так как переменные могут занимать больше 1 байта памяти. Следовательно, одна переменная может использовать 2, 4 или даже 8 последовательных адресов. Объем памяти, который использует переменная, зависит от типа данных этой переменной. Так как мы, как правило, получаем доступ к памяти через имена переменных, а не через адреса памяти, то компилятор может скрывать от нас все детали работы с переменными разных размеров.

Есть несколько причин по которым полезно знать, сколько памяти занимает определенная переменная/тип данных.

Во-первых, чем больше она занимает, тем больше информации сможет хранить. Так как каждый бит содержит либо 0, либо 1, то 1 бит может иметь 2 возможных значения.

2 бита могут иметь 4 возможных значения:

бит 0бит 1
00
01
10
11

3 бита могут иметь 8 возможных значений:

бит 0бит 1бит 2
000
001
010
011
100
101
110
111

По сути, переменная с n-ным количеством бит может иметь 2n возможных значений. Поскольку байт состоит из 8 бит, то он может иметь 28 (256) возможных значений.

Размер переменной накладывает ограничения на количество информации, которую она может хранить. Следовательно, переменные, которые используют больше байт, могут хранить более широкий диапазон значений.

Во-вторых, компьютеры имеют ограниченное количество свободной памяти. Каждый раз, когда мы объявляем переменную, небольшая часть этой свободной памяти выделяется до тех пор, пока переменная существует. Поскольку современные компьютеры имеют много памяти, то в большинстве случаев это не является проблемой, особенно когда в программе всего лишь несколько переменных. Тем не менее, для программ с большим количеством переменных (например, 100 000), разница между использованием 1-байтовых или 8-байтовых переменных может быть значительной.

Размер основных типов данных в C++

Возникает вопрос: «Сколько памяти занимают переменные разных типов данных?». Вы можете удивиться, но размер переменной с любым типом данных зависит от компилятора и/или архитектуры компьютера!

Язык C++ гарантирует только их минимальный размер:

КатегорияТипМинимальный размер
Логический тип данныхbool1 байт
Символьный тип данныхchar1 байт
wchar_t1 байт
char16_t2 байта
char32_t4 байта
Целочисленный тип данныхshort2 байта
int2 байта
long4 байта
long long8 байт
Тип данных с плавающей запятойfloat4 байта
double8 байт
long double8 байт

Фактический размер переменных может отличаться на разных компьютерах, поэтому для его определения используют оператор sizeof.

Оператор sizeof — это унарный оператор, который вычисляет и возвращает размер определенной переменной или определенного типа данных в байтах. Вы можете скомпилировать и запустить следующую программу, чтобы выяснить, сколько занимают разные типы данных на вашем компьютере:

#include <iostream>

int main()
{
std::cout << «bool:\t\t» << sizeof(bool) << » bytes» << std::endl;
std::cout << «char:\t\t» << sizeof(char) << » bytes» << std::endl;
std::cout << «wchar_t:\t» << sizeof(wchar_t) << » bytes» << std::endl;
std::cout << «char16_t:\t» << sizeof(char16_t) << » bytes» << std::endl;
std::cout << «char32_t:\t» << sizeof(char32_t) << » bytes» << std::endl;
std::cout << «short:\t\t» << sizeof(short) << » bytes» << std::endl;
std::cout << «int:\t\t» << sizeof(int) << » bytes» << std::endl;
std::cout << «long:\t\t» << sizeof(long) << » bytes» << std::endl;
std::cout << «long long:\t» << sizeof(long long) << » bytes» << std::endl;
std::cout << «float:\t\t» << sizeof(float) << » bytes» << std::endl;
std::cout << «double:\t\t» << sizeof(double) << » bytes» << std::endl;
std::cout << «long double:\t» << sizeof(long double) << » bytes» << std::endl;
return 0;
}


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

#include <iostream>

int main()

{

    std::cout << «bool:\t\t» << sizeof(bool) << » bytes» << std::endl;

    std::cout << «char:\t\t» << sizeof(char) << » bytes» << std::endl;

    std::cout << «wchar_t:\t» << sizeof(wchar_t) << » bytes» << std::endl;

    std::cout << «char16_t:\t» << sizeof(char16_t) << » bytes» << std::endl;  

    std::cout << «char32_t:\t» << sizeof(char32_t) << » bytes» << std::endl;    

    std::cout << «short:\t\t» << sizeof(short) << » bytes» << std::endl;

    std::cout << «int:\t\t» << sizeof(int) << » bytes» << std::endl;

    std::cout << «long:\t\t» << sizeof(long) << » bytes» << std::endl;

    std::cout << «long long:\t» << sizeof(long long) << » bytes» << std::endl;

    std::cout << «float:\t\t» << sizeof(float) << » bytes» << std::endl;

    std::cout << «double:\t\t» << sizeof(double) << » bytes» << std::endl;

    std::cout << «long double:\t» << sizeof(long double) << » bytes» << std::endl;

    return 0;

}

Вот результат, полученный на моем компьютере:

bool:           1 bytes
char:           1 bytes
wchar_t:        2 bytes
char16_t:       2 bytes
char32_t:       4 bytes
short:          2 bytes
int:            4 bytes
long:           4 bytes
long long:      8 bytes
float:          4 bytes
double:         8 bytes
long double:    8 bytes

Ваши результаты могут отличаться, если у вас другая архитектура, или другой компилятор. Обратите внимание, оператор sizeof не используется с типом void, так как последний не имеет размера.

Если вам интересно, что значит \t в коде, приведенном выше, то это специальный символ, который используется вместо клавиши TAB. Мы его использовали для выравнивания столбцов. Детально об этом мы еще поговорим на соответствующих уроках.

Интересно то, что sizeof — это один из 3-х операторов в языке C++, который является словом, а не символом (еще есть new и delete).

Вы также можете использовать оператор sizeof и с переменными:

#include <iostream>

int main()
{
int x;
std::cout << «x is » << sizeof(x) << » bytes» << std::endl;
}



#include <iostream>

 

int main()

{

int x;

std::cout << «x is » << sizeof(x) << » bytes» << std::endl;

}

Результат выполнения программы:

x is 4 bytes

На следующих уроках мы рассмотрим каждый из фундаментальных типов данных языка С++ по отдельности.

Оценить статью:

Загрузка…

Поделиться в социальных сетях:

10. Вещественные типы данных

Стандарт
C++
определяет три типа данных для хранения
вещественных значений: float,
double
и long
double.
Все эти типы предназначены для
представления отрицательных и
положительных значений (спецификатор
unsigned
к ним не применим) в разных диапазонах:

• тип
float
занимает в памяти 4 байта с диапазоном
абсолютных значений от 3.4е-38 до 3.4е+38;

• тип
double
занимает в памяти 8 байт с диапазоном
абсолютных значений от 1.7е-308 до 1.7е+308;

• тип
long
double
занимает в памяти 10 байт с диапазоном
абсолютных значений от 3.4e-4932
до 3.4e+4932.

.

Замечание.
В консольных приложениях Windows
тип данных long
double
занимает в памяти 8 байт, то есть ничем
не отличается от типа double.

Константы
вещественных типов задаются двумя
способами:

• нормальный
формат: 123.456 или -3.14;

• экспоненциальный
формат: 1.23456e2
(1.23456е+2). Привести другие примеры.

Дробная
часть отделяется от целой части точкой,
а не запятой.

По
умолчанию вещественные константы
трактуются как константы типа double.
Для явного указания другого типа
вещественной константы можно использовать
суффиксы F
(f)
— тип float
или L
(l)
— тип long
double:

3.14F
— константа типа float,

3.14L-
константа типа long
double.

Вещественные
типы данных (типы данных с плавающей
точкой) хранятся в памяти компьютера
иначе, чем целочисленные. Внутреннее
представление вещественного числа
состоит из двух частей — мантиссы и
порядка:

-1.2345e+2

|
|

мантисса
порядок

Тип
float
занимает 4 байта, из которых один двоичный
разряд отводится под знак мантиссы, 8
разрядов под порядок и 23 под мантиссу.

Для
величин типа double,
занимающих 8 байт, под порядок и мантиссу
отводится 11 и 52 разряда соответственно.
Длина мантиссы определяет точность
числа, а длина порядка — его диапазон.

Все
вычисления с вещественными значениями
осуществляются приближенно, при этом,
ошибки вычислений могут достигать
весьма существенных значений. Это
объясняется дискретностью внутреннего
(машинного) представления непрерывного
диапазона вещественных значений.
Точность представления значений
вещественных типов зависит от размера
мантиссы. Относительная точность
представления вещественных значений
остается постоянной при различных
значениях порядка. Однако, абсолютная
точность существенно зависит от значения
порядка (с уменьшением порядка абсолютная
точность возрастает).

11. Особенности представления вещественных типов данных

В
пункте 10.

12.Логический тип данных

Величины
логического типа могут принимать только
значения true и false, являющиеся
зарезервированными словами. Внутренняя
форма представления значения false — О
(нуль). Любое другое значение интерпретируется
как true. При преобразовании к целому типу
true имеет значение 1 (единица).

В
памяти переменные этого типа занимают
1 байт.

Определения
переменных этого типа выглядят, например,
так:

bool
b1, b2 = true, b3 (false), b4 = 1, b5 = 0;

Константы
– литералы задаются ключевыми словами
true и false.

Именованные
константы этого типа особого смысла не
имеют, но имеют право на существование.

типов данных C ++ — GeeksforGeeks

Все переменные используют тип данных во время объявления, чтобы ограничить тип сохраняемых данных. Следовательно, мы можем сказать, что типы данных используются, чтобы сообщить переменным, какой тип данных они могут хранить. Каждый раз, когда переменная определяется в C ++, компилятор выделяет для этой переменной некоторую память в зависимости от типа данных, с которым она объявлена. Для каждого типа данных требуется разный объем памяти.

Типы данных в C ++ в основном делятся на три типа:

  1. Примитивные типы данных : Эти типы данных являются встроенными или предопределенными типами данных и могут использоваться пользователем непосредственно для объявления переменных.пример: int, char, float, bool и т. д. В C ++ доступны следующие примитивные типы данных:
    • Целое число
    • Персонаж
    • логическое значение
    • с плавающей точкой
    • Двойная плавающая точка
    • Бесполезный или недействительный
    • Широкий символ
  2. Производные типы данных: Типы данных, производные от примитивных или встроенных типов данных, называются производными типами данных. Они могут быть четырех типов, а именно:
    • Функция
    • Массив
    • Указатель
    • Артикул
  3. Абстрактные или определяемые пользователем типы данных : Эти типы данных определяются самим пользователем.Например, определение класса в C ++ или структуры. C ++ предоставляет следующие определяемые пользователем типы данных:
    • Класс
    • Конструкция
    • Союз
    • Перечисление
    • Определенный типом DataType

В этой статье обсуждаются примитивные типы данных , доступные в C ++.

  • Целое число : ключевое слово, используемое для целочисленных типов данных, — int . Целые числа обычно требуют 4 байта памяти и находятся в диапазоне от -2147483648 до 2147483647.
  • Символ : Символьный тип данных используется для хранения символов. Ключевое слово, используемое для символьного типа данных, — char . Для символов обычно требуется 1 байт памяти и диапазон значений от -128 до 127 или от 0 до 255.
  • Boolean : Тип данных Boolean используется для хранения логических или логических значений. Логическая переменная может хранить либо true , либо false . Ключевое слово, используемое для логического типа данных, — bool .
  • Floating Point : Тип данных Floating Point используется для хранения значений с плавающей запятой одинарной точности или десятичных значений. Ключевое слово, используемое для типа данных с плавающей запятой, — с плавающей запятой . Для переменных с плавающей запятой обычно требуется 4 байта памяти.
  • Double Floating Point : Тип данных Double Floating Point используется для хранения значений с плавающей запятой двойной точности или десятичных значений. Ключевое слово, используемое для типа данных с двойной плавающей запятой, — double .Для переменных типа Double обычно требуется 8 байт памяти.
  • void : Пустота означает отсутствие значения. Тип данных void представляет собой бесполезную сущность. Тип данных Void используется для тех функций, которые не возвращают значение.
  • Wide Character : Тип данных Wide character также является символьным типом данных, но этот тип данных имеет размер больше обычного 8-битного типа данных. В лице wchar_t . Обычно это 2 или 4 байта.

Модификаторы типов данных

Как следует из названия, модификаторы типа данных используются со встроенными типами данных для изменения длины данных, которые может содержать конкретный тип данных.

Модификаторы типа данных, доступные в C ++:

  • Подпись
  • Без знака
  • Короткий
  • Длинный

В таблице ниже приведены измененный размер и диапазон встроенных типов данных в сочетании с модификаторами типов:

Тип данных Размер (в байтах) Диапазон
короткий внутренний 2 -32 768 до 32 767
беззнаковое короткое целое 2 0 до 65 535
целое число без знака 4 0 до 4 294 967 295
внутренний 4 -2 147 483 648 до 2 147 483 647
длинный внутренний 8 -2 147 483 648 до 2 147 483 647
беззнаковое длинное целое число 8 0 до 4 294 967 295
длинный длинный внутренний 8 — (2 ^ 63) до (2 ^ 63) -1
беззнаковое длинное длинное целое 8 0 до 18 446 744 073 709 551 615
знак со знаком 1 -128 до 127
символ без знака 1 0 до 255
поплавок 4
двойной 8
длинный двойной 12
wchar_t 2 или 4 1 широкий символ

Примечание : Приведенные выше значения могут отличаться от компилятора к компилятору.В приведенном выше примере мы рассмотрели 32-битный GCC.
Мы можем отобразить размер всех типов данных, используя оператор sizeof () и передав ключевое слово типа данных в качестве аргумента этой функции, как показано ниже:
& nb

Типы данных в C #

  • Подписывайтесь на нас


Тип данных Значение Размер (в байтах)
внутренний Целое число 2 или 4
поплавок с плавающей точкой 4
двойной Двойная плавающая точка 8
символ Персонаж 1
wchar_t Широкий символ 2
булев логический 1
пусто Пустой 0









Тип данных Размер (в байтах) Значение
подпись int 4 используется для целых чисел (эквивалент int )
целое без знака 4 может хранить только положительные целые числа
короткий 2 используется для малых целых чисел (диапазон от -32768 до 32767 )
длинный не менее 4 используется для больших целых чисел (эквивалент long int )
длинный без знака 4 используется для больших положительных целых чисел или 0 (эквивалент без знака long int )
длинный длинный 8 используется для очень больших целых чисел (эквивалент long long int ).
беззнаковый длинный длинный 8 используется для очень больших положительных целых чисел или 0 (эквивалент unsigned long long int )
длинный двойной 8 используется для больших чисел с плавающей запятой
символ со знаком 1 используется для символов (гарантированный диапазон от -127 до 127 )
символ без знака 1 используется для символов (диапазон от 0 до 255 )


Типы данных

Значение по умолчанию

Минимальное значение

Максимальное значение

сбайт

0

-128

127

байт

0