Pull to refresh

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

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/

Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.