1.4. Типы данных

C++ предоставляет работу со следюущими “примитивными” типами данных:

  • Примитивные
  • Производные
  • Пользовательские

В рамках первой лекции мы рассмотрим только примитивные типы данных. Остальные будут представлены позже. Примитивные делятся на:

  • Целочисленные (Integer) - short (2 байта), int (4 байта), long (8 байт)
  • Символ (Character) - char (1 байт)
  • Булевский (Boolean) - bool (1 байт) - может хранить или true или false
  • С плавающей точкой (Floating point) - float
  • С двойной точностью (Double floating point) - double
  • void - предствляет сущности без значения. Например для представления функций, которые не возвращают значения.

Модификаторы

Помимо основных примитивных типов C++ позволяет их обогатить знаковыми модификаторами (только для целочисленных типов и символа):

  • signed - знаковый. По умолчанию все целочисленные являются знаковыми
  • unsigned - беззнаковы. Увеличивает диапазон положительных значений в 2 раза за счет отсутствия отрицательных.

Типичные размеры

Тип Размер (в байтах) Диапазон
signed char 1 -128 до 127
unsigned char 1 0 до 255
short 2 -32,768 до 32,767
int 4 -2,147,483,648 до 2,147,483,647
long 8 -2,147,483,648 до 2,147,483,647
unsigned long 8 0 до 4,294,967,295
float 4 1Е–37 до 1Е+37 (с точностью не менее 6 значащих десятичных цифр)
double 8 1Е–37 до 1Е+37 (с точностью не менее 10 значащих десятичных цифр)

Посчитать размер типа можно с помощью sizeof:

#include<iostream> 
using namespace std; 
  
int main() 
{ 
    cout << "Size of char : " << sizeof(char) << " byte" << endl; 
    cout << "Size of int : " << sizeof(int) << " bytes" << endl; 
    cout << "Size of short : " << sizeof(short) << " bytes" << endl; 
    cout << "Size of long : " << sizeof(long) << " bytes" << endl; 
    cout << "Size of signed long : " << sizeof(signed long) << " bytes" << endl; 
    cout << "Size of unsigned long : " << sizeof(unsigned long) << " bytes" << endl; 
    cout << "Size of float : " << sizeof(float)  << " bytes" <<endl; 
    cout << "Size of double : " << sizeof(double) << " bytes" << endl;           
    return 0; 
}

Выведет:

Size of char : 1 byte
Size of int : 4 bytes
Size of short : 2 bytes
Size of long : 8 bytes
Size of signed long : 8 bytes
Size of unsigned long : 8 bytes
Size of float : 4 bytes
Size of double : 8 bytes

Литералы

Достаточно часто можно подсказать компилятору какой тип используется по описанию самого значения. Для этого используются литералы, с помощью которых можно “пометить” знаение к определенному типу. Список литералов следующий:

  • Целочисленные
    1. ‘a’ - код буквы ‘a’, тип char
    2. 42 - все целые числа по умолчанию тип int (если входят в диапозон, в противном случае long (опять таки, если войдут в диапазон))
    3. 1234567890L - суффикс L соответсвует типу long
    4. 1703U - суффикс U соответсвует типу unsigned int
    5. 2128506UL - соответствует типу unsigned long
  • Числа с плавающей точкой:
    1. 3.14 - все числа с плавающей точкой по умолчанию тип double
    2. 2.71F - суффикс F соответсвует типу float
    3. 3.0E8 - соотвествует значение 3.0 * 10^8
  • true и false - значения типа bool
  • Строки задаются в двойных кавычках: "Text string"