Типы данных в CPP
С++ - это строго типизированный язык. Это означает, что при объявлении переменных для них обязательно указывать тип данных. Общие сведения о типах данных вы можете получить здесь, а сейчас об основных типах данных в С++.
В С++, особенно в современном, типов данных очень много. Однако широко используются лишь некоторые - они приведены в таблице ниже:
| Тип данных | Пример | Описание |
| int | -100 | Простые целые числа. Могут быть как положительными, так и отрицательными. |
| unsigned int | 100U | Простые целые числа. Могут быть только положительными. |
| long | 500L | Изначально задумывался как расширенный тип int. Раньше int занимал два байта, а long - четыре байта, и, соответственно, мог хранить числа большего размера. Но в современных компиляторах, как правило, int и long не имеют отличий. Букву L в конце числа записывать не обязательно. Просто она даёт понять программисту, какой тип имеет константа. |
| unsigned long | 500UL | То же, что и long, но может принимать только положительные значения. |
| float | 3.14F | Вещественное (действительное) число единичной точности. |
| double | 3.14 | Вещественное (действительное) число двойной точности. Стандартное представление чисел с плавающей точкой. По сравнению с float занимает больше памяти. |
| char | 'A' | Символьный тип. Может хранить как символы, так и числа в диапазоне -128…127. Но обычно используется для символов. |
| string | "Hello, World!" | Строковый тип. Может хранить множество символов. |
| bool | true | Логический тип. Имеет только два значения: true и false (ИСТИНА и ЛОЖЬ). Фактически хранит значения 1 и 0 соответственно, а символьные значения true и false используются только для удобства. Вполне допустимо делать, например, так: bool bv = 0; |
Кого-то может удивить то, что стандартным считается число с плавающей точкой двойной точности, а не одинарной. На это есть исторические причины. Они ведут нас в те далёкие времена, когда Билл Гейтс утверждал, что 640 КБ памяти хватит всем и навсегда, а экономия памяти за счёт точности - это хорошая мысль.
Однако современные компьютеры практически не видят разницы - скорость вычислений особо не отличается
при использовании float и double, поэтому жертвовать точностью в большинстве случаев особого смысла нет.
А теперь некоторые пояснения…
Во-первых, вы наверняка заметили в примерах буквы после числовых значений. Например, 500L. Так делать можно, но не обязательно. Я, например, никогда не трачу время на то, чтобы напечатать лишний символ. Хотя в некоторых случаях это может оказаться и полезным.
Во-вторых, объявлять переменные можно, сразу присваивая им значения. Например, так:
string Hello = "Hello, World!"; bool bv = false;
В-третьих, будьте внимательны при работе с неотрицательными числами. Например, если вы напишите такой код:
unsigned int uiv = -100;
то это не будет ошибкой. Компилятор всё проглотит и вы получите программу. Вот только в переменной
uiv будет не -100, а что-то вроде 4294967196. Подробнее
о подобных неприятностях с типами данных я рассказывал здесь.
Также обратите внимание на представление символов и строк. В С++ это отличается:
char ch = 'A'; string Hello = "Hello, World!";
То есть символ заключается в одинарные кавычки, а строка - в двойные. Если вы заключите символ в двойные кавычки, то это будет уже не символ, а строка, состоящая из одного символа. И вот такой код:
char ch = "A";
не скомпилируется, а выдаст ошибку.
Кроме того, тип char может хранить и числа. Точнее, по сути он числа и хранит - ASCII-коды символов. И, можно, например, сделать так:
char cv = 100;
И это не будет ошибкой. Просто при выводе на экран вы увидите не число, а символ
(в нашем примере латинскую букву d, потому что 100 - это
ASCII-код этой буквы).
Если же вам надо вывести на экран именно числовое значение, хранящееся в типе char, то можно сделать, например, так:
cout << "cv = " << int(cv);
Ну и напоследок код простенькой программы, которая показывает, как всё вышесказанное можно использовать:
#include <iostream>
using namespace std;
int main(void)
{
int iv = -100;
unsigned int uiv = -100;
long lv = 500L;
float fv = 3.14F;
double dv = 3.14;
char ch = 'A';
char cv = 100;
string Hello = "Hello, World!";
bool bv = false;
cout << "iv = " << iv << ", uiv = " << uiv << endl;
cout << "fv = " << fv << ", dv = " << dv << endl;
cout << "ch = " << ch << ", cv = " << cv << endl;
cout << "bv = " << bv << endl;
cout << Hello << endl;
cout << "cv = " << int(cv) << " (" << cv << ")" << endl;
}
Как говорится, проверено - работает. А вывод на экран будет таким: