Типы данных в языке C++

User Rating: 4 / 5

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

В языке C++ типы данных предназначены для объявления переменных. Тип данных определяет тип и размер данных, которые связаны с какой-то конкретной переменной. Все типы данных делятся на три основные категории: целочисленные, с плавающей точкой и void. Все типы данных задаются стандартом языка C++ и встроены в компилятор.

Посмотрим сразу на список примитивных встроенных в C++ типов данных:

  • int - тип данных для хранения целых чисел. Размер памяти от 2 до 4 байт
  • float - тип данных для хранения чисел с "плавающей точкой", т.е. десятичных чисел (десятичных дробей). Размер памяти 4 байта
  • double - тип данных для хранения чисел с "плавающей точкой" двойной точности. Похож на тип данных float, но обеспечивает большую точность при расчётах и использовании десятичных дробей. Размер памяти 8 байт
  • char - тип данных для хранения одного символа. Размер памяти 1 байт
  • wchar_t - тип данных для хранения одного "расширенного" символа. Размер памяти 2 байта
  • bool - логический тип данных, используется для хранения значений булева типа, т.е. тех, что могут принимать значения "истина" или "ложь". Размер памяти 1 байт
  • void - тип данных, обозначающий "пустоту", или "отсутствие какого-то значения". Размер памяти 0 байт

Язык C++ чрезвычайно мощный, и на перечисленном выше списке возможные типы данных, которые могут использоваться в C++, не ограничиваются.

Некоторые из базовых типов могут быть также изменены с помощью одного или нескольких модификаторов типа:

  • signed - модификатор типа указывает, что тип является типом со знаком, т.е. может хранить как положительные, так и отрицательные значения.
  • unsigned - модификатор типа указывает, что тип является беззнаковым, т.е. хранит только неотрицательные значения.
  • short - применяется для хранения небольших числовых значений. Когда применяется к типу данных int, то урезает диапазон хранимых значений для типа int, а также размер памяти под хранимое значение с 4 байт до 2 байт 
  • long - применяется для хранения больших числовых значений. Когда применяется к типу данных int, то расширит диапазон хранимых значений для типа int, а также размер памяти под хранимое значение с 4 байт до 8 байт 

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

Тип данных int

Тип данных int широко применяется там, где нужна работа с целыми числами. По умолчанию можно хранить в переменных типа int как положительные, так и отрицательные значения. Ниже показано простое объявление трёх разных переменных с типом int:

int daysInWeek = 7;
int monthsInYear = 12;
int currentYear = 2022;
int someNegativeValue = -20;

 

Тип данных float

Тип данных float, в отличие от типа int, используется для хранения чисел с плавающей точкой, или, проще говоря, десятичных дробей. Поддерживает как положительные, так и отрицательные значения. Давайте взглянем, как можно объявить переменные типа float:

float bottleVolume = 0.5;
float normalHumanTemperature = 36.6;
float someNegativeFloatValue = -72.7;

 

Тип данных double

Как уже было сказано, тип данных double очень похож на float, за исключением того, что он использует больше памяти для хранения данных (8 байт вместо 4 байт для типа float). В остальном определения переменных с типом double выглядят почти так же, как и для вышеупомянутых типов:

double doubleVal1 = 1234.56789101112;
double doubleVal2 = -77.1122334455667788;

 

Тип данных char

Тип данных char используется для хранения символов (от англ. characters, отсюда и название самого типа данных). Значения для этого типа данных заключаются с обеих сторон в одинарные кавычки ( ' ), например, давайте объявим пару переменных с этим типом данных:

char chA = 'A';
char chB = 'B';
char chQuestionMark = '?';

 

Тип данных bool

Тип данных bool может иметь всего одно из двух возможных значений - true или false. Значение true обозначает "истину", а false - "ложь". Посмотрим на пример:

bool isNegative = false;
bool isDataEntered = true;

В примере выше объявили две переменных с типом bool. Одна из них isNegative инициализирована значением false и может, например, обозначать примерно такой смысл: "не является отрицательным" (если мы пишем какую-то логику, проверяющую числа на отрицательное значение). Вторая переменная isDataEntered инициализирована значением true (помним, что это значение соответствует "истине") и может, к примеру, обозначать что "данные введены". Если мы ей где-нибудь дальше в тексте присвоили бы значение false, это могло бы для нас означать "данные не введены".

Тип данных void

Тип данных void представляет отсутствие данных. Он обозначает буквально "ничто" или "нет значения". Тип данных void как правило используется при работе с функциями и указателями. Важным моментом, который нужно запомнить, является то, что мы не можем объявить переменную с типом void. (к слову, указатели с использованием типа void вполне допустимы в C++).

А вот как может выглядеть объявление функции с типом void, которая "ничего не возвращает" (фактически, этот метод является процедурой):

void functionReturningNothing() {
   // делаем здесь что-то...
}

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

 
Тип данных Размер памяти под тип данных Диапазон принимаемых значений
int 4 байта от -2 147 483 648 до 2 147 483 647
unsigned int 4 байта от 0 до 4 294 967 295
signed int 4 байта от -2 147 483 648 до 2 147 483 647
short int 2 байта от -32 768 до 32 767
unsigned short int 2 байта от 0 до 65 535
char 1 байт от -127 до 127 или от 0 до 255
unsigned char 1 байт от 0 до 255
signed char 1 байт от -127 до 127
long int 8 байт от -2 147 483 648 до 2 147 483 647
signed long int 8 байт от -2 147 483 648 до 2 147 483 647
unsigned long int 8 байт от 0 до 4 294 967 295
long long int 8 байт от -(2^63) до (2^63)-1
unsigned long long int 8 байт от 0 до 18 446 744 073 709 551 615
float 4 байта относительное значение диапазона: является наименьшим типом с плавающей запятой в C++ (абсолютный размер встроенных типов с плавающей запятой не указан в стандарте языка C++)
double 8 байт относительное значение диапазона: значения больше или равны типу float, но меньше, чем у long double (абсолютный размер встроенных типов с плавающей запятой не указан в стандарте языка C++)
long double 12 байт относительное значение диапазона принимаемых значений: значения больше или равны размеру типа double (абсолютный размер встроенных типов с плавающей запятой не указан в стандарте языка C++)

Посмотрим, как можно объявлять переменные с некоторыми из расширенных типов данных, представленных в таблице:

unsigned char ch = 255;
unsigned long int veryLongInt = 18446744073709551615;
long double veryLongDoubleValue = 0.333333333333333333333333333333333333333333333333333;

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

#include <iostream>

int main() {
    std::cout << "Size of 'int' data type: " << sizeof(int) << " bytes" << std::endl;
    std::cout << "Size of 'unsigned int' data type: " << sizeof(unsigned int) << " bytes" << std::endl;
    std::cout << "Size of 'signed int' data type: " << sizeof(signed int) << " bytes" << std::endl;
    std::cout << "Size of 'short int' data type: " << sizeof(short int) << " bytes" << std::endl;
    std::cout << "Size of 'unsigned short int' data type: " << sizeof(unsigned short int) << " bytes" << std::endl;
    std::cout << "Size of 'float' data type: " << sizeof(float) << " bytes" << std::endl;
    std::cout << "Size of 'double' data type: " << sizeof(double) << " bytes" << std::endl;
    std::cout << "Size of 'long double' data type: " << sizeof(long double) << " bytes" << std::endl;
    std::cout << "Size of 'bool' data type: " << sizeof(bool) << " bytes" << std::endl;
    std::cout << "Size of 'char' data type: " << sizeof(char) << " bytes" << std::endl;
    std::cout << "Size of 'unsigned char' data type: " << sizeof(unsigned char) << " bytes" << std::endl;
    std::cout << "Size of 'signed char' data type: " << sizeof(signed char) << " bytes" << std::endl;
    std::cout << "Size of 'wchar_t' data type: " << sizeof(wchar_t) << " bytes" << std::endl;
    std::cout << "Size of 'long int' data type: " << sizeof(long int) << " bytes" << std::endl;
    std::cout << "Size of 'unsigned long int' data type: " << sizeof(unsigned long int) << " bytes" << std::endl;
    std::cout << "Size of 'long long int' data type: " << sizeof(long long int) << " bytes" << std::endl;
    std::cout << "Size of 'unsigned long long int' data type: " << sizeof(unsigned long long int) << " bytes" << std::endl;
}

Результат выполнения программы на экране консоли будет выглядеть следующим образом:

Size of 'int' data type: 4 bytes
Size of 'unsigned int' data type: 4 bytes
Size of 'signed int' data type: 4 bytes
Size of 'short int' data type: 2 bytes
Size of 'unsigned short int' data type: 2 bytes
Size of 'float' data type: 4 bytes
Size of 'double' data type: 8 bytes
Size of 'long double' data type: 8 bytes
Size of 'bool' data type: 1 bytes
Size of 'char' data type: 1 bytes
Size of 'unsigned char' data type: 1 bytes
Size of 'signed char' data type: 1 bytes
Size of 'wchar_t' data type: 2 bytes
Size of 'long int' data type: 4 bytes
Size of 'unsigned long int' data type: 4 bytes
Size of 'long long int' data type: 8 bytes
Size of 'unsigned long long int' data type: 8 bytes

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

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

Напоследок отмечу, что если Вы работаете со средой C++ в среде разработки Microsoft Visual Studio, то более подробно о типах данных в языке C++ можно также почитать здесь.

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

Яндекс.Метрика