Главная Материалы Новости Форум Поддержать сайт     

Немного о типах данных


       Часто при обучении программированию возникают недопонимания типа: зачем в языке программирования нужно описывать типы данных, для чего это придумано и где у всего этого смысл.
       Прежде чем рассмотреть, зачем нужен тип данных, сначала о том, что такое переменная. Вы присваиваете некоторому участку памяти, где может храниться информация имя – это имя и есть переменная. То есть, если ещё проще, то переменная – это имя некоторой записи в памяти компьютера. Хороший пример – сотовый телефон. Там, вы записи тоже часто храните под некоторыми именами. Например, под именем “магазин” вы можете хранить номер телефона магазина хоз. товаров. Имя “магазин” – переменная, а номер телефона – данные, что в ней хранятся. Вы можете отредактировать запись “магазин” сменив там номер телефона на другой, например, на номер телефона зоомагазина. И вот в той же самой переменной с тем же самым именем теперь уже лежит другая информация – раньше под именем “магазин” скрывался номер телефона хоз. товаров, а теперь там номер телефона зоомагазина. Итак, переменная – это имя, которое вы назначаете некоторому участку памяти, где может храниться разная информация.
       Теперь о типе данных. Прежде чем присвоить какому-либо участку памяти имя, компьютеру необходимо "объяснить", данные какого типа будут храниться под эти именем. То есть когда создаёте переменную, то вы не только должны назначить ей некое имя, но также должны указать какого типа данные могут храниться под данным именем. Например, в языке c++ если вы создаёте переменную с именем shop таким образом:

int shop;

то это означает, что в участок памяти с именем shop вы можете записывать только целые числа (идентификатор типа int на это и указывает). Если потом запишете в программе:

shop = 4;

то это будет означать, что в участке памяти под именем shop теперь хранится число 4. А вот если вы запишете:

shop = 3.1415;

то компьютер вас “не поймёт” и выдаст предупреждение об ошибке сделанной вами в данной записи, так как компьютер знает, что в участке памяти с именем shop числа c дробной частью храниться не могут (сделанное ранее вами же описание shop, как int чётко указывает компьютеру на это).
       А почему компьютеру надо заранее “объяснять” какого типа данные мы собираемся хранить под тем или иным именем? Дело в том, что любые данные в компьютере хранятся в закодированном виде – в виде набора нулей и единиц. И каждый тип – это своя кодировка. То есть числа целого типа кодируются ("зашифровываются") в набор нулей и единиц при помощи своего кода, числа с дробной частью кодируются нулями и единицами по-другому, у букв алфавита свой код. И если компьютер получил набор нулей и единиц, то кроме этого набора компьютеру необходима ещё и информация - как при необходимости всё это раскодировать, какого типа данные в этих нулях и единицах "зашифрованы". Если компьютер знает, что, например, под именами shop хранятся целые числа, то это означает, что компьютеру так же “понятно”, что делать, если программист отдаст ему следующую команду:

cout << shop;

у компьютера есть инструкции-программа, как необходимо поступать в данной ситуации. В данном случае компьютер возьмет нули и единицы, что хранятся под этим именем и раскодирует их так, чтобы на экране монитора нарисовалось именно то самое десятичное целое число, что мы записали ранее в участок с именем shop (если ранее мы записали в переменную shop число 4 при помощи команды shop=4, то теперь на экран и будет выведено число 4). Если же, например, shop ранее описано следующим образом:

char shop;

то компьютер, получив команду:

cout << shop;

раскодирует нули и единицы, хранящиеся в памяти с именем shop, так, что на экране монитора появится символ типа буквы алфавита, так как тип char – это именно символьный тип. Также, например, если мы в программе сделаем следующие описания:

int shop, delta, t;
char book, zs, q2;

то этими командами мы указываем компьютеру, что в участках памяти с именами shop, delta и t содержаться нули и единицы, которые есть коды целых чисел, а вот в участках памяти с именами book, zs, q2 находятся нули и единицы, которые есть коды букв (символов). И в дальнейшем в программе компьютер должен обращаться с этими кодами соответствующим образом. Причём речь не только о раскодировке, но и о том, что можно делать, а что нельзя с переменными того или иного типа. Например, если у вас что-то уже записано в переменные указанного выше типа и далее в программе вы запишите:

book = zs * q2;

то компьютер выдаст сообщения об ошибке, так как символы, что вы записали в участках book, zs, q2 перемножать нельзя – не имеет смысла перемножать буквы алфавита, а вот если запишите:

shop = delta * t;

то всё будет нормально, так как числа перемножать можно. Таким образом, тип переменной определяет не только способ кодировки (способ хранения) данной информации в данном участке памяти, но также тип переменной определяет, какие действия допустимы, а какие нет над информацией в виде нулей и единиц, хранящейся в данном участке памяти. Как уже описано выше, если хранимая информация имеет тип char, то вы не имеете право её перемножать с чем-либо и т.д. То есть тип переменной указывает компьютеру ещё и смысл (по научному – семантику) информации в данном участке памяти – имеет она смысл, например, целого числа (с ней необходимо оперировать, как с числами) или смысл буквы алфавита (с ней необходимо оперировать, как с буквами алфавита).


p.s. Для того, кто интересуется устройством компьютера можно посоветовать вот эту книгу и в частности главу из неё – "Что такое компьютер" (саму книгу или отдельные главы из неё вы можете приобрести здесь).



Обсудить на форуме



                     Комментарии



Представтесь (не менее 2-х символов):

Сообщение:

Далее функция антиспама.
Ответьте на вопрос:
Восемь умножить на сто будет равно? (введите числом):






Читаем книгу "Что людей объединяет или обо всём понемногу"

Что людей объединяет ...