Для чего нужен тип переменной
5.2.1. Типы данных
Тип данных – понятие из теории программирования. Тип данных определяет диапазон значений и операций, которые могут быть применены к этим значениям. Например, если переменная имеет числовой тип данных, то таким образом определен диапазон значений, которые могут быть сохранены в этой переменной (числа) и определены операции, которые могут быть применены к этой переменной (арифметические). Каждый язык программирования поддерживает один или несколько типов данных.
Вообще говоря, в памяти компьютера хранятся только последователь-ности битов. Если имя переменной указывает адрес в памяти, по которому хранится информация, то тип данных (тип переменной) указывает, каким обра-зом следует обращаться с этой информацией, то есть с битами, находящимися по данному адресу.
Преимущества от использования типов данных:
- Надежность. Типы данных защищают от трех видов ошибок:
1. Некорректное присваивание. Пусть переменная объявлена как имеющая числовой тип. Тогда попытка присвоить ей символьное или какое-либо другое значение приведет к ошибке еще на этапе компиляции и позволит избежать многих трудностей, поскольку такого рода ошибки трудно отследить обычными средствами. Предварительное объявление используемых переменных сейчас обязательно практически во всех языках.
2. Некорректная операция. Позволяет избежать попыток применения выражений вида «Hello world» + 1. Поскольку, как уже говорилось, все переменные в памяти хранятся как наборы битов, то при отсутствии типов подобная операция была выполнима (и могла дать результат вроде «Hello wordle»!). С использованием типов такие ошибки отсекаются на этапе компиляции.
3. Некорректная передача параметров. Если функция «синус» ожидает, что ей будет передан числовой аргумент, то передача ей в качестве параметра строки » Hello world» может иметь непредсказуемые последствия. При помощи контроля типов такие ошибки также отсекаются на этапе компиляции.
Классификация типов данных. Согласно стандартной классификации, типы данных бывают следующие:
1.1. Числовые. Хранятся числа. Могут применяться обычные арифметические операции.
1.1.1. Целочисленные: со знаком, то есть могут принимать как положительные, так и отрицательные значения; и без знака, то есть могут принимать только неотрицательные значения.
1.1.2. Вещественные: с фиксированной точкой, то есть хранятся знак и цифры целой и дробной частей и с плавающей точкой, то есть число приводится к виду m*2e, где m — мантисса, e — экспонента причем 1/2
1.2. Символьный тип. Хранит один символ. Могут использоваться различные кодировки.
1.3. Строковый тип. Хранит строку символов. Может применяться операция конкатенация (сложение строк). Вообще говоря, может рассматриваться как массив символов, но как правило выделяется в качестве простого.
1.4. Логический тип. Имеет два значения: истина(true) и ложь(false). Могут применяться логические операции. Используется в операторах ветвления и циклах. В некоторых языках является подтипом числового типа, при этом false=0, true=1.
1.5. Перечислимый тип. Может хранить только те значения, которые прямо указаны в его описании.
2. Составные. Формируются на основе комбинаций простых типов.
2.1. Массив. Является индексированным набором элементов одного типа. Одномерный массив — вектор, двумерный массив — таблица.
2.2. Запись. Набор различных элементов (полей записи), хранимый как единое целое. Возможен доступ к отдельным полям записи.
2.3. Множество (тип данных). В основном совпадает с обычным математическим понятием множества. Допустимы стандартные операции с множествами и проверка на принадлежность элемента множеству.
3. Другие типы данных. Если описанные выше типы данных представляли какие-либо объекты реального мира, то рассматриваемые здесь типы данных представляют объекты компьютерного мира, то есть являются исключительно компьютерными терминами.
3.1. Указатель (тип данных). Хранит адрес в памяти компьютера, указывающий на какую-либо информацию, как правило — указатель на переменную.
3.2. Ссылки (тип данных).
Что такое типы данных и зачем они нужны?
Предполагается, что Вы всё ещё помните с прошлого шага, что такое переменная. Если не помните, вернитесь и посмотрите. А мы продолжаем.
Кроме имени и области в памяти, любая переменная имеет такую важную характеристику как тип данных , которые будут храниться в этой переменной. Постараюсь пояснить.
Как уже говорилось ранее, программы работают с различными данными, а не только с числами. И если для человека записи «x=3», «x=3.0» и «x = три» несут одинаковую смысловую нагрузку, то для компьютера это не так очевидно. Мы понимаем, что в каждой из этих записей говорится, что х равен трём. Компьютер же пока не настолько умен, чтобы это осознать. Ему нужно точно знать, с какими данными он будет работать. И дело даже не в том, число это или слово, ему важно даже то, целое это число или вещественное. Поэтому все переменные имеют дополнительную характеристику — тип данных.
Наверное, вам известно, что в памяти компьютера все числа хранятся в виде последовательности 0 и 1. Так вот, для того чтобы записать любое число только ноликами и единичками существуют определённые правила. Эти правила довольно сильно отличаются для целых чисел и для вещественных чисел. В памяти компьютера числа «3» и «3.0» будут записаны совершенно по-разному. Для тех, кто заинтересовался представлением чисел в памяти компьютера, в конце урока я дам ссылки на дополнительные материалы по этой теме.
Кроме того, зачастую компьютеры гораздо быстрее и лучше могут производить различные действия с целыми числами, чем с вещественными. Если вы не забросите этот курс, то на одном из следующих уроков мы в этом убедимся. Раньше, когда компьютеры занимали целую комнату, это была безусловная истина, а теперь этот факт уже нужно проверять.
Подведём итог. Каждая переменная должна иметь конкретный тип данных. И в эту переменную можно сохранить данные только этого типа.
Возвращаясь к аналогии с ящиками, можем думать, что существуют различные ящики. Одни ящики подходят только для целых чисел, другие — только для вещественных чисел, третьи — только для хранения букв. И нельзя в ящик для букв положить вещественное число. Точнее положить можно, но тогда ваша программа работать не будет. Очень важно следить за этим делом и не путать мух с котлетами. Порядок должен быть в этом деле.
Базовые типы данных в языке Си.
Ниже выписаны некоторые (не все!) базовые типы данных, которые есть в языке Си, и которые вы будете использовать в ваших программах чаще всего.
- целые числа – тип int,
- вещественные числа – тип double
- и символы – тип char.
Для вещественных чисел есть ещё тип float. Он в некотором смысле хуже типа double. Две основные причины: у типа float меньше диапазон хранимых чисел, меньше точность (примерно 7 знаков после запятой, против 15 у типа double). Про точность у нас ещё будет пример в третьем уроке.
Есть и другие типы данных, но мы пока о них говорить не будем, чтобы не забивать свою память различными нюансами, которые на начальном этапе не так уж важны.
Важно другое. Необходимо понимать, что тип данных для переменной нужно выбирать в зависимости от того, что мы собираемся в этой переменной хранить. Например, если бы мы считали количество посещений какой-то страницы на сайте, то для этого мы использовали переменную типа int, а вот для хранения курса доллара целые числа уже бы не подошли. Думаю, у банка возникли бы серьёзные проблемы после использования такой программы.
Сохрани в закладки или поддержи проект.
Практика

Решите предложенные задачи. Для удобства работы сразу переходите в полноэкранный режим
Исследовательские задачи для хакеров:
- Под переменные различных типов данных выделяется различное количество памяти. В стандарте языка определены только соотношения между этими размерами. Ваша задача самостоятельно изучить как работает функция sizeof(); и выяснить размеры типов данных на вашем компьютере. (выполнять после прохождения всего второго урока)
Дополнительные материалы
- Язык Си является языком со статической слабой явной типизацией. Хотите узнать что это такое? Читайте статью о типизации в различных языках программирования
- Хороший подробный материал о том, как хранятся различные числа в компьютере. К.Ю. Поляков, А.П. Шестаков, Е.А. Еремин. Алгоритмизация и программирование // Информатика, № 17, 2011, с. 4-33. зеркало
- Cтатья о том, как хранятся вещественные числа в компьютере и какие с ними могут происходить казусы. ссылка
для чего нужен тип переменной?
Что б не получилось добавление символов или деление целых чисел, это бы выбило программу, а так при компиляции укажет на ошибку, но в PHP насколько я знаю тип данных указывать ненадо.
Тип переменной помогает показывает какое место и сколько места она должна занять в оперативной памяти.
бывают: int (integer) — числовые
str (string) — строковые (символьные)
float — число с плавающей точкой (тоесть числа врод 2.6, 5.3)
bool — булевы значения.. . могут принять только два знаечния true(истина) или false (лож) (или 1 и 0 соответственно)
Программе приходиться хранить разные типы данных: строки, числа, знаки, массивы и т д.
Для каждого типа данных есть свой тип переменных.
дабы компилятор отслеживал ваши ошибки и тем самым снижал их кол-во))))
Чтобы компилятор знал, сколько памяти нужно выделять для хранения переменной.
Для того, чтобы ограничить область значений переменной, определить операции,
допустимые для данной переменной, указать интерпретацию её значений.
Зачем нужны типы?
Для чего вообще нужны типы в языке? Разве не проще было бы писать везде auto или вообще не указывать ничего перед именем переменной?
Отслеживать
13.7k 12 12 золотых знаков 43 43 серебряных знака 75 75 бронзовых знаков
задан 17 ноя 2018 в 7:04
11 1 1 бронзовый знак
auto здесь ни при чем. auto не убирает типы, а лишь позволяет не упоминать тип повторно там, где тип и так уже однозначно указан явно или неявно.
17 ноя 2018 в 7:35
Как же без типов-то? Типы определят семантику операций, применяемых к объектам. Без типов эту семантику невозможно будет определить.
17 ноя 2018 в 7:38
@AnT почему невозможно? если я хочу сложить два числа 2+2, то разве не ясно, что это сложение чисел, а не строк? то же самое если x=2, y=2 и x+y
17 ноя 2018 в 7:40
чтобы компилятор запротестовал если вдруг решим складывать int и string , а то будет как в javascript, где «5» + 3 дает 53 а «5» — 3 дает 2
17 ноя 2018 в 8:10
@walter А с чего вдруг он будет протестовать если типы переменных ему не известны? В лучшем случае проверки типов перенесутся в рантайм.
17 ноя 2018 в 8:17
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Нужна какая-то наглядная аналогия из жизни.
Есть гвозди и шурупы. Это разные ТИПЫ крепежа.
Чтобы скрепить две доски гвоздями, нужен молоток.
Чтобы скрепить две доски шурупами, нужна отвертка.
Столяру (транслятору) нужно знать тип крепежа, чтобы правильно применить к этому крепежу операцию (соответственно забить гвоздь молотком или завернуть шуруп отверткой).
Также транслятору нужно знать тип операндов, чтобы правильно вызвать подпрограмму с заказанной операцией.
Нужно также понимать, что при сложении двух переменных типа int транслятор вызывает одну подпрограмму, а при сложении двух переменных типа float транслятор вызывает совсем другую подпрограмму (в терминах столяра берет либо молоток либо отвертку).
Зайдем с другого бока.
Все рассуждения относятся к архитектуре x86.
Пусть транслятору сначала надо сложить сначала два целых (int числа), а потом транслятору надо сложить два числа с плавающей точкой (float числа).
Когда транслятор складывает два целых (int) числа, то он просто вызывает команду add.
Когда транслятор складывает два float числа, то он пересылает оба операнда в сопроцессор с плавающей точкой, потом включает сопроцессор с плавающей точкой, потом дожидается конца операции, потом достает результат из сопроцессора с плавающей точной и помещает этот результат в память.
Из этого примера видно, что, в зависимости от типа операндов, действия транслятора существенно разные. Поэтому транслятору нужно знать не только какая операция ему заказана программистом (в данном примере заказано сделать сложение), но также транслятору нужно знать типы операндов, чтобы правильно выполнить операцию сложения. Ибо, хотя в обоих случаях операция как-бы одна и та же (сложение), но транслятор (и процессор) выполняют ее существенно по-разному для разных типов операндов. Для типа int достаточно одной команды add. А для типа float нужна целая подпрограмма.