Welcome! Никак руки не доходили сделать эту статью, но теперь я её пишу.
Типы данных - одна из важнейших частей языка. Переменные, функции, поля класса и даже другие типы данных - ничто без данных. Без данных: перменная уже не хранит значение, а функция его не возвращает. Но что такое данные? Почему всё держится именно на них? Зачем данные разделяют на типы? И почему int ≠ 4 байта?
Хочешь узнать ответы? Бегом под кат!
Что такое данные?
- Что такое данные?
Казалось бы... Это все лишь вопрос. Как он связан с данными? Но всё не так просто.
Когда человек задаёт вопрос: он передаёт информацию, а другой человек получает информацию. Когда прозвучит ответ: человек задавший вопрос получит информацию, а человек ответивший на него передаст информацию.
Это называется обмен данными. Но что сдесь данные? Давайте заглянем в терминологию:
Да́нные — зарегистрированная информация; представление фактов, понятий или инструкций в форме, приемлемой для общения, интерпретации, или обработки человеком или с помощью автоматических средств (ISO/IEC/IEEE 24765-2010).
Зачем нужны данные? (Где используются данные?)
Теперь, когда мы знаем что такое данные, мы должны узнать с чем их едят.
На самом деле, данные используются везде. И сейчас, то, что ты читаешь - это данные. А на вид и не скажешь. Вы думали что данные - это единицы, да нолики? А вот и нет. Это ещё и двойки. 2 <- вот, видите? Двойка. Ладно, ладно, давайте без шуток. Данные вездесущи, а программирование - это работа с данными.
Почему всё держится именно на данных
Из прошлого предложения можно понять: "Все - есть данные". Соответсвенно на них же всё и держится. Когда мы создаём переменную: мы передаём в неё данные.
int var = 123; // var = 123
- Но что если мы передадим в переменную... Другую переменную?
Без проблем.
int var = 123; // var = 123
int foo = variable; // foo = var = 123
- Ага, то есть, перменная это тоже данные?
Да, всё именно так.
- А что будет, если мы создадим пустую переменную? Мы же не передаём в неё данные?
Хорошо, давай попробуем.
int var; // var = ?
Чему тогда равна переменная? Нулю? Пустоте(void)? А вот и нет.
int var; // var = ?
var == 0; // False. var ≠ 0
void null; // null is empty. null = void
var == null; // False. var ≠ null. var ≠ void
Выходит в переменной есть данные. Но какие? Это мы должны спросить у конкретных типов данных. Например в int по стандарту(в C++) помещается значение одного из адрессов оперативной памяти.
- Но какого адресса? Он же не случайный?
Нет, конечно. Когда мы создаём переменную: под неё выделяется память, и значение которое было по адрессу нашей новой переменной, присваевается переменной.
int var; // var = junk
- Хмм, хорошо. А что ты скажешь по поводу void? Это же пустота. В void 0 байт. Void ничему не равен.
Хах, давай проверим.
void var; // var is empty
int var_size; // var_size = junk
var_size = sizeof(var); // var_size = 1 (1 byte)
- Стоп, что? Но void же ничему не равен! Как он занимает 1 байт?
На самом деле тут нет ничего странного. Любая переменная в C++ хранится в ОЗУ. И void тоже. Соответственно, void должна что-то хранить. Но что она хранит - мы не можем узнать. Так как void хранит значение, мы можем получить адресс void переменной.
void* var; // var = ?
void var2 = var; // var2 = var
Зачем данные делят на типы?
Для начала, давайте разберёмся, что такое тип данных?
Тип данных — допустимое множество значений.
Это один из вариантов того, как можно описать данный термин. Этот вариант хорошо подходит для этой статьи, because я расказываю только о простых типах данных, а они как раз таки и являются множеством допустимых значений.
Для пользовательских типов данный (ака классы) лучше использовать этот вариант.
Тип данных — класс данных, характеризуемый членами класса и операциями, которые могут быть к ним применены.
- Хорошо. Мы знаем что такое тип данных. А зачем эти типы нужны?
Ответ на данный вопрос есть. Принадлежит он, конечно, не мне.
Наверное, вам известно, что в памяти компьютера все числа хранятся в виде последовательности 0 и 1. Так вот, для того чтобы записать любое число только ноликами и единичками существуют определённые правила. Эти правила довольно сильно отличаются для целых чисел и для вещественных чисел. В памяти компьютера числа "3" и "3.0" будут записаны совершенно по-разному.
int ≠ 4 байта. Почему?
Ответ на этот вопрос предельно прост. Размер и числовой диапазон типов данных задаётся процессором. Соответсвенно размер int зависит от процессора в комьютере. Для 16 битный процессоров - это 2 байта (short int), для 32 и 64 битных - 4 байта (long int). Правда это не всегда так. "Но почему?", - спросите вы меня. А ответа я не дам. Попробуйте найти ответ сами ;)
До связи.
Источники информации:
http://youngcoder.ru/lessons/2/tipy_dannyh.php
http://itandlife.ru/programming/cpp/tipy-dannyx-c/
https://wikipedia.org/