Что определяет тип данных

Что определяет тип данных

Тип данных — Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям и, возможно, способ реализации хранения значений и выполнения операций.

Классификация типов данных

Целые (shortint(1байт), byte(1байт), word(2байт), integer(2байт), longint(4байт))

Вещественные (real, single, double, extended, comp)

Символьные (char (1 байт))

Логические(Boolean(1байт), ByteBool(1байт), WordBool(2байт), LongBool(4байт))

Перечислимые(пример: type op = (plus, minus, mult, divide);)

Переменная простого (скалярного) хранит только одно значение. Переменные составного (структурированного) типа одновременно хранят несколько значений.

ЧИСЛОВЫЕ ТИПЫ ДАННЫХ (c,c++,c#)

Размер памяти, бит

signed char (знаковый символьный) — shortInt в Delphi

unsigned char (беззнаковый символьный) – Byte в Delphi

short int (короткое целое) – smallInt в Delphi

от–32768 до 32767

unsigned int (беззнаковое целое) – cardinal в Delphi

от 0 до 65535 (16-битная платформа) от 0 до 4294967295 (32-битная платформа)

int (целое) – Integer в Delphi

от–32768 до 32767 (16-битная платформа) от –2147483648 до 2147483647 (32-битная платформа)

long (длинное целое) – longInt в Delphi

от–2147483648 до 2147483647

unsigned long (длинное целое без знака) — аналога в Delphi нет

от 0 до 4294967295

float (вещественное) – single в Delphi

от 3.4E–38 до 3.4E38

double (двойное вещественное) – double

от 1.7E–308 до 1.7E308

long double (длинное вещественное) — extended

от 3.4E–4932 до 3.4E4932

В 32-разрядной ОС Windows тип int занимает в памяти 32 бита, и диапазон допустимых значений для знакового int в этом случае от -2147483648 до 2147483647. тип int – машинно-зависимый, и для него выделяется одно машинное слово, длина которого в 16-разрядных процессорах – 16 бит, в 32-разрядных – 32 бита.

Машинное слово — машиннозависимая и платформозависимая величина, измеряемая в битах или байтах (тритах или трайтах), равная разрядности регистров процессора и/или разрядности шины данных (обычно некоторая степень двойки).

С целочисленными типами данных возможны следующие операции:

нахождение остатка от деления;

смена знака числа;

а также все операции отношения.

Представление чисел с плавающей точкой

0. ·10 например: 0.123·10 3

С данными в виде чисел с плавающей точкой возможны следующие операции:

возведение в степень;

нахождение остатка от деления (не во всех языках);

смена знака числа;

отношение "больше" и "меньше";

а также доступны другие алгебраические функции.

В стандарте языка определено три различных символьных типа: char, signed char и unsigned char. Внутренним представлением символа является его код — целое число

sizeof(char) = sizeof(signed char) = sizeof(unsigned char) = 1

Размер байта зависит от реализации, однако этот размер должен быть достаточен, чтобы вместить код любого символа из набора символов реализации для данного компьютера. Наличие знака у типа char тоже зависит от реализации: он может совпадать либо с signed char, либо с unsigned char.

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

Процессор не различает типы char, определенные в C/C++ и Delphi. Однако функционально каждый из этих языков трактует данный тип совершенно по-разному. В C/C++ это целый тип, переменной которого можно присваивать целые значения. Переменной int можно присвоить символьное значение, а переменной char — целое. В Delphi символьные типы жестко отделены от численных. Для присвоения численному значению символьного здесь необходимо воспользоваться функцией Ord.

БУЛЕВЫ ТИПЫ (ЛОГИЧЕСКИЕ)

К булевым операциям относятся:

конъюнкция (логическое "И");

дизъюнкция (логическое "ИЛИ");

отрицание (логическое "НЕ");

логическое "исключающее ИЛИ";

Логические выражения могут принимать только два значения: "false" и "true".

Булевы типы в Delphi можно сравнить с типом LOGICAL языка FORTRAN. В Basic, С и C++ булевы типы как таковые отсутствуют. Булевы выражения в этих языках применяются точно так же, как во всех остальных, однако результаты этих выражений интерпретируются не как значения отдельного типа, а как целые числа. Как в Basic, так и в C/C++ булевы выражения дают численные результаты, интерпретируемые как False в случае 0 и True — в случае любого ненулевого значения. Это совместимо с порядковыми значениями булевых выражений в Delphi. В C/C++ простые сравнения дают результат 1 (True) или 0 (False). Это эквивалентно булевым значениям Delphi. Только результат сравнения в Delphi выводится как булевый, а не целый. В большинстве случаев типу Boolean из Delphi соответствует тип char в C/C++. В Basic зарезервированы слова TRUE (эквивалентно константе -1) и FALSE (эквивалентно константе 0). В Basic TRUE меньше FALSE, в Delphi, наоборот, False меньше True.

Читайте также:  Программа на бейсике пример

Одним из преимуществ языков программирования (таких как "Паскаль", "Си") является появление "пользовательских" типов данных. В языке Си к таким данным относят структуры, объединения и перечисления. Рассмотрим их поподробнее.

Структура представляет собой несколько типов данных, расположенных вместе, в соседних ячейках памяти. Структура имеет собственное имя как тип данных, длина ее элемента (в памяти компьютера) вычисляется с помощью функции sizeof (в C и C++).

const unsigned short MAXSTRINGLENGTH = 256;

Объединение похоже на структуру, но в ней данные хранятся не вместе друг с другом, а вместо друг друга. Например, в следующем объединении с тегом data:

const unsigned short STRDATALENGTH = 32:

В Pascal объединением будет Variant Type:

FirstName, LastName: string[40];

case Citizen: Boolean of

True: (BirthPlace: string[40]);

False: (Country: string[20]);

Может храниться либо длинное целое, либо данные с плавающей точкой, либо массив-строка символов длиной 32 байта, причем все — в одних и тех же ячейках памяти. Функция sizeof, примененная к объединению, выдает значение самого длинного типа данных в объединении.

Обращение к элементам структуры и объединения осуществляется либо через знак “.”, либо знаком "->". Например:

const unsigned short MAXSTRINGLENGTH = 256;

struct stringz aString, *theString;

union data aData, *theData;

memset(theString -> string, ‘’, MAXSTRINGLENGTH);

theData -> doubledata = 7.0;

TYPE Bool = (True, False);

Переменные типа "перечисление" представляют собой целые переменные без знака, способные принимать значения только из списка: . , причем первой константе соответствует значение "0".

Переменную перечисления в Си можно привести к целому типу. Обратное действие вызывает неопределенность.

В С и C++ есть тип enum, аналогичный перечислимому типу Delphi. Но в этих языках можно произвольно присваивать идентификаторам постоянные значения. В Delphi же соответствие имен и их значений фиксиро-вано: первому имени присваивается значение 0, каждому последующему — на единицу больше. В С тип enum применяется лишь как средство быстрого определения набора целых постоянных. В C++ объявленные в перечислимом типе идентификаторы можно присваивать только переменным того же типа.

МАССИВЫ И УКАЗАТЕЛИ

Массивы представляют собой смежные ячейки памяти, начиная с начального адреса массива и до последней ячейки памяти массива. Доступ к каждой ячейке памяти осуществляется по его индексу. С помощью индекса вычисляется адрес нужной ячейки по формуле:

Ещё в 1960-х г.г. Р. Хиндли (Roger Hindley) исследовал типизацию в комбинаторной логике. Его проблемной областью была типизация в языках, основаных на теории лямбда-исчисления. Позднее, в конце 1960-х годов, тот же учёный исследовал полиморфные системы типов. Позже, в 1970-х годах, Робин Милнер предложил практическую реализацию расширенной системы полиморфной типизации для языка функционального программирования ML.

Определение

Тип (сорт) — относительно устойчивая и независимая совокупность элементов, которую можно выделить во всём рассматриваемом множестве (предметной области). [1]

Полиморфный тип — представление набора типов как единственного типа.

Математически тип может быть определён двумя способами:

  1. Множеством всех значений, принадлежащим типу.
  2. Предикатной функцией, определяющей принадлежность объекта к данному типу

Необходимость использования типов данных

Типы данных различаются начиная с нижних уровней системы. Так, например, даже в Ассемблере х86 различаются типы «целое число» и «вещественное число». Это объясняется тем, что для чисел рассматриваемых типов отводятся различные объёмы памяти, используются различные регистры микропроцессора, а для операций с ними применяются различные команды Ассемблера и различные ядра микропроцессора.

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

Практическое применение

Как правило, типы языков программирования не всегда строго соответствуют подобным математическим типам. Например, тип «целое число» большинства языков программирования не соответствует принятому в математике типу «целое число», так как в математике указанный тип не имеет ограничений ни сверху, ни снизу, а в языках программирования эти ограничения есть. Как правило, в языках и системах имеется множество целых типов, отличающихся допустимым диапазоном значений (определяемым объёмом занимаемой памяти). Стоит отметить, что в большинстве реализаций языков и систем выход за границу целого типа (переполнение) не приводит к исключительной ситуации.

Читайте также:  Автоматическая установка драйверов amd radeon

Современные языки программирования (включая Ассемблер) поддерживают оба способа задания типа (см. Определение). Так, в С++ тип enum является примером задания типа через набор значений. Определение класса (если рассматривать класс как тип данных) фактически является определением предиката типа, причём возможна проверка предиката как на этапе компиляции (проверка соответствия типов), так и на этапе выполнения (полиморфизм очень тесно связано с полиморфными типами). Для базовых типов подобные предикаты заданы создателями языка изначально.

Языки без типов

Теоретически не может существовать языков, в которых отсутствуют типы (включая полиморфные). Это следует из того, что все языки основаны на машине Тьюринга или на лямбда-исчислении. И в том, и в другом случае необходимо оперировать как минимум одним типом данных — хранящимся на ленте (машина Тьюринга) или передаваемым и возвращаемым из функции (лямбда-исчисление). Ниже перечислены языки программирования по способу определения типов данных:

1) Языки с полиморфным типом данных. Одни языки не связывают переменные, константы, формальные параметры и возвращаемые значения функций с определёнными типами, поддерживая единственный полиморфный тип данных. В чистом виде таких языков не встречается, но близкие примеры — MS Visual Basic — тип variant, Пролог, Лисп — списки. В этих языках переменная может принимать значение любого типа, в параметры функции можно передавать значения любых типов, и вернуть функция также может значение любого типа. Сопоставление типов значений переменных и параметров с применяемыми к ним операциями производится непосредственно при выполнении этих операций. Например, выражение a+b , может трактоваться как сложение чисел, если a и b имеют числовые значения, как конкатенация строк, если a и b имеют строковые значения, и как недопустимая (ошибочная) операция, если типы значений a и b несовместимы. Такой порядок называют «динамической типизацией» (соответствует понятию полиморфизм в ООП, полиморфный тип в теории типов). Языки, поддерживающие только динамическую типизацию, называют иногда «бестиповыми». Это название не следует понимать как признак отсутствия понятия типов в языке — типы данных всё равно есть.

2) Языки с неявным определением типов. Казалось бы, BASIC является примером языка без типов. Однако это строго типизированый язык: в нём различаются строковые типы (добавляется символ $), массивы (добавляется []) и числовые типы (ничего не добавляется).

3) Языки с типом, определяемым пользователем. Также хорошо известны языки, в которых типы данных определяются автоматически, а не задаются пользователем. Каждой переменной, параметру, функции приписывается определённый тип данных. В этом случае для любого выражения возможность его выполнения и тип полученного значения могут быть определены без исполнения программы. Такой подход называют «статической типизацией». При этом правила обращения с переменными, выражениями и параметрами разных типов могут быть как очень строгими (С++), так и весьма либеральными (Си). Например, в классическом языке Си практически все типы данных совместимы — их можно применять совместно в любых выражениях, присваивать значение переменной одного типа переменной другого почти без ограничений. При таких операциях компилятор генерирует код, обеспечивающий преобразование типов, а логическая корректность такого преобразования остаётся на совести программиста. Подобные языки называют «языками со слабой типизацией». Противоположнось им — «языки с сильной типизацией», такие как Ада. В них каждая операция требует операндов строго заданных типов. Никакие автоматические преобразования типов не поддерживаются — их можно выполнить только явно, с помощью соответствующих функций и операций. Сильная типизация делает процесс программирования более сложным, но даёт в результате программы, содержащие заметно меньше труднообнаруживаемых ошибок.

На практике языки программирования поддерживают несколько моделей определения типов одновременно.

Базовые типы

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

Преимущества от использования типов данных

  • Надёжность. Типы данных защищают от трёх видов ошибок:
  1. Некорректное присваивание. Пусть переменная объявлена как имеющая числовой тип. Тогда попытка присвоить ей символьное или какое-либо другое значение в случае статической типизации приведёт к ошибке компиляции и не даст такой программе запуститься. В случае динамической типизации код программы перед выполнением потенциально опасного действия сравнит типы данных переменной и значения и также выдаст ошибку. Всё это позволяет избежать неправильной работы и «падения» программы.
  2. Некорректная операция. Позволяет избежать попыток применения выражений вида «Hello world» + 1. Поскольку как уже говорилось все переменные в памяти хранятся как наборы битов, то при отсутствии типов подобная операция была выполнима (и могла дать результат вроде «ello worldǼ»). С использованием типов (см. далее «Контроль типов») такие ошибки отсекаются опять же на этапе компиляции.
  3. Некорректная передача параметров. Если функция «синус» ожидает, что ей будет передан числовой аргумент, то передача ей в качестве параметра строки «Hello world» может иметь непредсказуемые последствия. При помощи контроля типов такие ошибки также отсекаются на этапе компиляции.
  • Стандартизация. Благодаря соглашениям о типах, поддерживаемых большинством систем программирования, сложилась ситуация, когда программисты могут быстро менять свои рабочие инструменты, а программы не требуют больших переделок при переносе исходных текстов в другую среду. К сожалению, стандартизации по универсальным типам данных ещё есть куда развиваться.
Читайте также:  Просмотр айпи камеры через интернет

Классификация типов данных [2] [3]

Типы данных бывают следующие:

  • Простые.
  • Перечислимый тип. Может хранить только те значения, которые прямо указаны в его описании.
  • Числовые. Хранятся числа. Могут применяться обычные арифметические операции.
  • Целочисленные: со знаком, то есть могут принимать как положительные, так и отрицательные значения; и без знака, то есть могут принимать только неотрицательные значения.
  • Вещественные: с запятой (то есть хранятся знак и цифры целой и дробной частей) и с плавающей запятой (то есть число приводится к виду m*b e , где m — мантисса, b — основание показательной функции, e — показатель степени (порядок) (в англоязычной литературе экспонента), причём в нормальной форме 0 Контроль типов и системы типизации

Процесс проверки и накладывания ограничений типов — контроля типов, может выполняться во время компилирования (статическая проверка) или во время выполнения (динамическая проверка).

  • Статическая типизация — контроль типов осуществляется при компиляции.
  • Динамическая типизация — контроль типов осуществляется во время выполнения.

Контроль типов также может быть строгим и слабым.

  • Строгая типизация — совместимость типов автоматически контролируется транслятором:
  • Номинативная типизация (англ.nominative type system) — совместимость должна быть явно указана (наследована) при определении типа.
  • Структурная типизация (англ.structural type system) — совместимость определяется структурой самого типа (типами элементов, из которых построен составной тип).
  • Слабая типизация — совместимость типов никак транслятором не контролируется. В языках со слабой типизацией обычно используется подход под названием «утиная типизация» — когда соместимость определяется и реализуется общим интерфейсом доступа к данным типа.
  • Тип данных — фундаментальное понятие теории программирования. Тип данных определяет множество значений, набор операций, которые можно применять к таким значениям, и, возможно, способ реализации хранения значений и выполнения операций. Кроме того, тип определяет формат внутреннего представления данных в памяти ПК. Любые данные, которыми оперируют программы, относятся к определённым типам.

    Типы данных бывают следующие:

    1.Текстовый – хранение обычного текста(от 0 до 255 символов).

    2.Поле Мемо – для хранения больших объемов текста, текст не хранится в поле, а хранит указатель на него.

    3.Числовые — хранятся действительные числа.

    4.Дата/время – календарная дата и текущее время.

    5.Денежный – хранение денежной суммы.

    6.Счётчик – для уникальных неповторяющихся чисел с автоматическим наращиванием. Используется для нумерации.

    7.Логический тип – логические данные, имеет два значения: истина и ложь.

    8.Поле объекта OLE – спец. тип данных, для хранения мультимедийных объектов, но хранится не сам объект, а только указатель на него.

    10.Мастер подстановок – выбор из списка, чтобы не вводить вручную.

    91.Что такое лексема? Перечислите виды лексем языка высокого уровня (Фортран, Кобол, Алгол, Pascal, Бейсик, Java, C++, C#, Objective, Smalltalk, Delphi)

    Лексема — последовательность допустимых символов языка программирования, имеющая смысл для транслятора. Транслятор рассматривает программу как последовательность лексем.

    Лексема (token) — это минимальная единица языка, имеющая самостоятельный смысл.

    Существуют следующие виды лексем в С++:

    В Turbo Pascal имеются следующие классы лексем:
    1. Служебные (зарезервированные) слова

    2. Идентификаторы (имена)

    3. Изображения

    4. Знаки операций

    5. Разделители

    Не нашли то, что искали? Воспользуйтесь поиском:

    Лучшие изречения: Для студентов недели бывают четные, нечетные и зачетные. 9908 — | 7691 — или читать все.

    Ссылка на основную публикацию
    Что делать если завис телефон андроид
    Что делать, если завис Андроид и не реагирует не на что? В этой статье мы посмотрим четыре простых способа как...
    Фум лента в стоматологии фото
    Автор: G. Freedman Перевод: Александр Зыбайло Автор: G. Freedman Перевод: Александр Зыбайло Ограничение количества цемента для фиксации и использование определенной...
    Функции жесткого диска в компьютере
    Жесткий диск, он же винчестер, является основным местом, где хранится вся информация. В отличие от оперативной памяти, он энергетически независим,...
    Что дают за рейтинговые бои
    В кои-то веки разработчики решили прислушаться к мнению игроков и ввести в Варфейс рейтинговые матчи. Теперь каждый игрок, достигший 26...
    Adblock detector