Изучение C++ в Linux. Типы данных.
С++ является типизированным языком программирования, где переменные, функции и их аргументы необходимо явно задавать. Так как язык является расширяемым, то типов данных может огромное множество, мы рассмотрим только основные.
В предыдущей статье, я коротко об этом упоминал, но давайте попробуем разобраться какие типы данных есть в языке C++:
- - void
- - целочисленные
- - с плавающей запятой
Void
Типом void можно считать пустоту, то есть данный тип ничего не возвращает и не хранит. Данный тип нельзя использовать для объявления переменных. Как правило, данный тип используется для объявления функций, которые ничего не возвращают. Например:
#include <iostream> using namespace std; void test(){ cout << "Hello World!" << endl; } int main() { test(); return 0; }
Как видим из этого примера, у нас есть функция test(), которая имеет тип void. Единственное что делает данная функция, так это вывод текст на экран. Если вы попытаетесь сделать возвращение каких либо данных (return 0; return true; или return), то компилятор вернет ошибку. Но можно использовать следующую конструкцию:
#include <iostream> using namespace std; void test(){ int nNCelsius; cout << "Введите температуру по Цельсию: " << endl; cin >> nNCelsius; if (nNCelsius > 10){ cout << "температура больше 10 градусов!" << endl; return; } cout << "температура " << nNCelsius << " градусов!" << endl; } int main() { test(); return 0; }
В данном примере, мы сделали возвращение пустого return; что бы завершить выполнение данной функции.
Целочисленные
Целочисленные типы хранят в себе, как понятно из названия, целые числа.
Char
Данный тип используется для хранения символов. Для Char отводиться в системе 1 байт (8 бит), что дает возможность закодировать 256 символов ASCII.
Пример:
#include <iostream> using namespace std; int main() { char character = 'Z'; cout << "В character хранится " << character << endl; cout << "Тип char имеет " << sizeof(character) << " байт" << endl; char charArr[] = "Привет мир!"; cout << "В charArr хранится " << charArr << endl; cout << "Тип char имеет " << sizeof(charArr) << " байт" << endl; return 0; }
Вначале мы объявили переменную character с типом char, мы записали туда только одну букву, обратите внимание на кавычки, я использовал одинарные, это указывает системе, что тут один символ, если использовать двойные кавычки — будет ошибка. Если попытаться написать туда что-то еще, кроме буквы Z, то компилятор выдаст ошибку.
Вторая переменная charArr уже имеет [], что указывает, что я буду использовать строковой массив данных, и кавычки уже двойные. По сути текст: «Привет мир!» это массив из 11 символов.
По-этому если вам нужно использовать какой то текст, в котором больше чем 1 символ, вам нужно использовать строковой массив char charArr[] и двойные кавычки.
Bool
Тип данных Bool так же является целочисленным, но используется для логических операций, значение которое он может принимать от 0 до 255. 0 является значением false (ложь), а 1 и больше true (правдой)
#include <iostream> using namespace std; bool CheckThis(){ int nNCelsius; cout << "Введите температуру по Цельсию: " << endl; cin >> nNCelsius; return (nNCelsius > 10); } int main() { bool Check = false; if ( Check ){ cout << "В данном примере этот код никогда не выполнется" << endl; } else { cout << "Check - всегда является false (ложью)" << endl; cout << "Тип bool имеет " << sizeof(Check) << " байт" << endl; } if (CheckThis()){ cout << "температура больше 10 градусов!" << endl; } else { cout << "температура меньше 10 градусов!" << endl; } return 0; }
Переменная Check — является типом bool, которой присвоено значение false (0 или ложь), дальше мы делаем довольно абсурдную конструкцию с точки программирования, но это сделано ради примера, так как код
cout << "В данном примере этот код никогда не выполнется" << endl;
Никогда не выполниться, ведь if ( Check ){ проверяет, будет ли Check больше нуля (true).
Дальше по коду идет проверка if (CheckThis()){, в которой проверяет будет ли функция CheckThis возвращать true или false. Если посмотреть код данной функции, можно увидеть что значение будет зависеть, от того что мы ввели с клавиатуры.
Конструкцию return (nNCelsius > 10); можно представить так
if (nNCelsius > 10){ return true; } else { return false; }
Остальные целочисленные типы
Вместе с целочисленными типами можно использовать специальные модификаторы
- unsigned — значение будет идти без отрицательных чисел
- signed — значение может быть как положительным, так и отрицательным
short int
Целое число, небольшого диапазона, занимающая всего 2 байта в памяти. Short int может принимать значения от -32 768 до 32 767. Если добавить модификатор unsigned то значение будет от 0 до 65 535
Пример:
#include <iostream> #include <cmath> using namespace std; int main() { cout << "Тип short int имеет " << sizeof(short int) << " байт" << endl; cout << "Тип short int имеет " << ( pow(2,sizeof(short int) * 8.0 - 1) - 1) << endl; cout << "Тип unsigned short int имеет " << sizeof(unsigned short int) << " байт" << endl; cout << "Тип unsigned short int имеет " << ( pow(2,sizeof(unsigned short int) * 8.0) - 1) << endl; short int Gold = 32768; cout << "а если данные превысят порог в 32765? Что мы получим: " << Gold << "!" << endl; return 0; }
Обратите внимание, что выдаст программа если превышено значение принимаемого значения? Да, будет -32768, мы получим самый крайний отрицательный результат, для данного типа. Тоже актуально и для остальных целочисленных типов!
Int
Целое число, для данного типа выделяется 4 байта памяти. Int имеет значения от -2 147 483 648 до 2 147 483 647. Если добавить unsigned, то значение будет от 0 до 4 294 967 295
#include <iostream> #include <cmath> using namespace std; int main() { cout << "Тип int имеет " << sizeof(int) << " байт" << endl; cout << "Тип int имеет " << ( pow(2,sizeof(int) * 8.0 - 1) - 1) << endl; cout << "Тип unsigned int имеет " << sizeof(unsigned int) << " байт" << endl; cout << "Тип unsigned int имеет " << ( pow(2,sizeof(unsigned int) * 8.0) - 1) << endl; return 0; }
long int
Данный тип занимает 8 байта и имеет значения от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807, а unsigned long int от 0 до 18 446 744 073 709 551 615
#include <iostream> #include <cmath> using namespace std; int main() { cout << "Тип long int имеет " << sizeof(long int) << " байт" << endl; cout << "Тип long int имеет " << ( pow(2,sizeof(long int) * 8.0 - 1) - 1) << endl; cout << "Тип unsigned long int имеет " << sizeof(unsigned long int) << " байт" << endl; cout << "Тип unsigned long int имеет " << ( pow(2,sizeof(unsigned long int) * 8.0) - 1) << endl; return 0; }
Типы с плавающей точкой или дробные типы
В С++ существует 2 типа, позволяющие записывать числа с плавающей точкой — float и double
Float
Данный тип занимает 4 байта, и может иметь значения от -2 147 483 648.0 до 2 147 483 647.0
#include <iostream> #include <cmath> using namespace std; int main() { cout << "Тип float имеет " << sizeof(float) << " байт" << endl; cout << "Тип float имеет " << ( pow(2,sizeof(float) * 8.0 - 1) - 1) << endl; return 0; }
Double
Данный тип занимает 8 байта, и может иметь значения от -9 223 372 036 854 775 808 .0 до 9 223 372 036 854 775 807.0
#include <iostream> #include <cmath> using namespace std; int main() { cout << "Тип float имеет " << sizeof(double) << " байт" << endl; cout << "Тип float имеет " << ( pow(2,sizeof(double) * 8.0 - 1) - 1) << endl; return 0; }
В C++ есть еще такой тип как перечисления (enum) его я рассмотрю в следующих статьях.
Станьте первым!