До сих пор мы вели речь только о том, чтобы записать в память некое число. Если у меня есть 5 книг, я записываю в память число 5, и считаю, что сохранил информацию о книгах. Но эта информация относится только к количеству. А что насчет качества? Что насчет синего или красного цвета, или названия книги? Название – это текст, написанный буквами, а как сохранить в памяти буквы?
Ответ везде один и тот же –
В компьютерной памяти хранятся только числа. Никаких букв, никаких красных или синих цветов. Только числа.
Легче не стало? Ничего, сейчас разберемся.
Если количество книг мы смогли представить числом 5, то ничто не мешает представить, например, латинскую букву "A" тоже каким-нибудь числом.
Латинская буква "A" будет обозначаться числом 65. (Это действительно так, а почему – расскажу позже.)
Итак, чтобы записать в память букву "A", нужно записать число 65. Всё, проблема решена. Присвоены числа и другим буквам: B = 66, C = 67, D = 68 и так далее. Теперь мы можем записать в память любую букву в виде числа.
Если стоит задача сохранить синий цвет, его тоже можно перевести в число. Например, тоже 65 :) Это будет означать, что по шкале от 0 (самый тёмный) до 255 (самый яркий) яркость синего цвета составляет 65.
Таким образом, мы можем сохранить в памяти: 65 как количество чего-нибудь, 65 как букву "A", 65 как яркость синего цвета.
Если посмотреть на то, что получилось, то мы увидим в памяти просто три байта, и в каждом записано 65 (в двоичном виде 01000001). Но как компьютер понимает, где число, где буква, где цвет?
А это ещё легче. Компьютер ВООБЩЕ НИКАК не понимает, где что. Ему ПЛЕВАТЬ! Для него есть только три числа, записанные в три разных адреса. Кто из них число, кто буква, а кто цвет – известно только нам, и вся ответственность лежит на нас.
Из этого следует одна интересная вещь: в компьютерной памяти мы можем творить любой абсурд. Например, можем сложить букву A и синий цвет. Или сложить число 65 и букву A. Что получится в результате?
65 + A = 130. Вот это и получится, потому что это всего лишь числа. Компьютеру плевать!
Такие операции с памятью могут быть очень полезны и даже незаменимы (особенно для хакеров), но в основном от программирования требуется обратный эффект – чтобы мы не могли случайно или нарочно сложить цифру с буквой. И языки программирования выступают посредниками между нами и компьютером.
Когда мы пишем на языке программирования, мы заранее объявляем, где у нас число, а где буква, и так далее, и правила языка начинают это всё отслеживать. Мы уже не помещаем свои данные в память напрямую, это делает за нас язык, он как бы ведет учет и знает, где что лежит и как со всем этим обращаться. В большинстве языков программирования существуют следующие типы данных, которые они различают:
- Число. Это просто число. Количество книг, температура воздуха и так далее.
- Символ. Это один символ вроде буквы "A", или специальный символ типа "%", "@", "$", и т.д. Пробел (" ") тоже считается символом.
- Строка. Это любое количество символов, расположенных в памяти подряд друг за другом.
Да-да, чтобы сохранить в памяти строку "Hello world", мы просто подряд, друг за другом, сохраняем символы H,e,l,l,o, ,w,o,r,l,d.
Да в общем-то и всё, других типов особо и нет, но есть еще структуры данных, подробности и нюансы, которые обсудим в следующих выпусках.