Главная > Уроки > Что такое типы данных и зачем они нужны?

Записывайся на этот курс на Stepike!

Что такое типы данных и зачем они нужны?

Предполагается, что Вы всё ещё помните с прошлого шага, что такое переменная. Если не помните, вернитесь и посмотрите. А мы продолжаем.

Кроме имени и области в памяти, любая переменная имеет такую важную характеристику как тип данных, которые будут храниться в этой переменной. Постараюсь пояснить.

Как уже говорилось ранее, программы работают с различными данными, а не только с числами. И если для человека записи "x=3", "x=3.0" и "x = три" несут одинаковую смысловую нагрузку, то для компьютера это не так очевидно. Мы понимаем, что в каждой из этих записей говорится, что х равен трём. Компьютер же пока не настолько умен, чтобы это осознать. Ему нужно точно знать, с какими данными он будет работать. И дело даже не в том, число это или слово, ему важно даже то, целое это число или вещественное. Поэтому все переменные имеют дополнительную характеристику -- тип данных.

Наверное, вам известно, что в памяти компьютера все числа хранятся в виде последовательности 0 и 1. Так вот, для того чтобы записать любое число только ноликами и единичками существуют определённые правила. Эти правила довольно сильно отличаются для целых чисел и для вещественных чисел. В памяти компьютера числа "3" и "3.0" будут записаны совершенно по-разному. Для тех, кто заинтересовался представлением чисел в памяти компьютера, в конце урока я дам ссылки на дополнительные материалы по этой теме.

Кроме того, зачастую компьютеры гораздо быстрее и лучше могут производить различные действия с целыми числами, чем с вещественными. Если вы не забросите этот курс, то на одном из следующих уроков мы в этом убедимся. Раньше, когда компьютеры занимали целую комнату, это была безусловная истина, а теперь этот факт уже нужно проверять.

Подведём итог. Каждая переменная должна иметь конкретный тип данных. И в эту переменную можно сохранить данные только этого типа.

Возвращаясь к аналогии с ящиками, можем думать, что существуют различные ящики. Одни ящики подходят только для целых чисел, другие - только для вещественных чисел, третьи - только для хранения букв. И нельзя в ящик для букв положить вещественное число. Точнее положить можно, но тогда ваша программа работать не будет. Очень важно следить за этим делом и не путать мух с котлетами. Порядок должен быть в этом деле.

Базовые типы данных в языке Си.

Ниже выписаны некоторые (не все!) базовые типы данных, которые есть в языке Си, и которые вы будете использовать в ваших программах чаще всего.

  • целые числа – тип int,
  • вещественные числа – тип double
  • и символы – тип char.

Для вещественных чисел есть ещё тип float. Он в некотором смысле хуже типа double. Две основные причины: у типа float меньше диапазон хранимых чисел, меньше точность (примерно 7 знаков после запятой, против 15 у типа double). Про точность у нас ещё будет пример в третьем уроке.

Есть и другие типы данных, но мы пока о них говорить не будем, чтобы не забивать свою память различными нюансами, которые на начальном этапе не так уж важны.

Важно другое. Необходимо понимать, что тип данных для переменной нужно выбирать в зависимости от того, что мы собираемся в этой переменной хранить. Например, если бы мы считали количество посещений какой-то страницы на сайте, то для этого мы использовали переменную типа int, а вот для хранения курса доллара целые числа уже бы не подошли. Думаю, у банка возникли бы серьёзные проблемы после использования такой программы.

Сохрани в закладки или поддержи проект.

Практика

Решите предложенные задачи. Для удобства работы сразу переходите в полноэкранный режим

Исследовательские задачи для хакеров:

  1. Под переменные различных типов данных выделяется различное количество памяти. В стандарте языка определены только соотношения между этими размерами. Ваша задача самостоятельно изучить как работает функция sizeof(); и выяснить размеры типов данных на вашем компьютере. (выполнять после прохождения всего второго урока)

Дополнительные материалы

  1. Язык Си является языком со статической слабой явной типизацией. Хотите узнать что это такое? Читайте статью о типизации в различных языках программирования
  2. Хороший подробный материал о том, как хранятся различные числа в компьютере. К.Ю. Поляков, А.П. Шестаков, Е.А. Еремин. Алгоритмизация и программирование // Информатика, № 17, 2011, с. 4-33. зеркало
  3. Cтатья о том, как хранятся вещественные числа в компьютере и какие с ними могут происходить казусы. ссылка

Оставить комментарий

Чтобы код красиво отображался на странице заключайте его в теги [code] здесь писать код [/code]

Комментарии

Илья
Второй абзац, вторая строка - переменных
Пятый абзац, третья строка - комьютеры
KaDeaT
Спасибо, поправил!
abychutkin
меньше точность (примерно 7 знаков, против 15 у типа double) - тут имеется в виду количество знаков после запятой? если это так, то может обратить на это внимание в тексте?
KaDeaT
Да, именно знаки после запятой. Поправил.
Hrozhek
Стандарт IEE 754 регламентирует представление чисел с плавающей точкой. Если я правильно понимаю, название типа произошло float - от [b]float[/b]ing point (single precision), double - от floating point ([b]double[/b] precision). Ранее в процессорах для действий с числами с плавающей точкой часто устанавливали отдельный модуль - математический сопроцессор, который в какой-то момент стал модулем основного ЦП. Все (почти) это и многое другое в книге Ч.Петцольда "Код. Тайный язык информатики". Всем рекомендую.
KaDeaT
Хорошее дополнение, спасибо!
Лёха
На сколько я cлышал, доллары и центы (рубли и копейки) хронятся отдельно как целые числа в переменных типа long,а не в double, чтобы не было постоянных проблем с потерей точности при выполнении различных банковских вычислений и последующим округлением, например, при операциях начисления процентов. Так ли это?
KaDeaT
Мне не доводилось работать с финансовыми программами, поэтому я не знаю точный ответ. Но тоже слышал о подобном подходе.
Лёха
имхо, в литературе sizeof описывается как унарный оператор а не функция. Его значение определяется на стадии компилаяции программы, скобки после него не являются частью оператора - а частью операнда. sizeof работает с типами данных а не с самими объектами, поэтому его можно вычислить во время компиляции. По этой же причине выражение в скобках не будут выполняются во время работы программы а служат только для определения типа выражения. Вообще сам термин "оператор" какой то двусмысленный в контексте языков С/C++. Есть же операторы +,-,* и они выполняются после запуска программы.
pchristi
Вместо int в sizeof можно закинуть любой тип данных, тем самым узнать это великое соотношение

#include <stdio.h>

int main(void)
{
printf("%d", sizeof(int));
return (0);
}
KaDeaT
Да, всё верно.
EuSe
У кого-то из нас с логикой проблемы.
не могу выполнить задание
"Отметьте варианты данных, для которых лучше использовать тип int (целые числа)."
EuSe
У кого-то из нас с логикой проблемы.
не могу выполнить задание
"Отметьте варианты данных, для которых лучше использовать тип int (целые числа)."