Как стать автором
Обновить

Больше чем просто типы данных…

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/

Теги:
Хабы:
Данная статья не подлежит комментированию, поскольку её автор ещё не является полноправным участником сообщества. Вы сможете связаться с автором только после того, как он получит приглашение от кого-либо из участников сообщества. До этого момента его username будет скрыт псевдонимом.