Изучение C++ в Linux. Типы данных.

Программирование на C++ 7 сентября 2015 г., 22:14

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

В предыдущей статье, я коротко об этом упоминал, но давайте попробуем разобраться какие типы данных есть в языке 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) его я рассмотрю в следующих статьях.



Станьте первым!

Пожалуйста, авторизуйтесь или зарегистрируйтесь для комментирования!

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