Примитивный тип данных - Primitive data type

В Информатика, примитивный тип данных может быть одним из следующих:[нужна цитата ]

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

В большинство языков программирования встроены все основные типы данных. Кроме того, многие языки также предоставляют набор составных типов данных.

В зависимости от языка и его реализации примитивные типы данных могут иметь или не иметь взаимно однозначное соответствие с объектами в памяти компьютера. Однако обычно ожидается, что операции с базовыми примитивными типами данных будут самыми быстрыми языковыми конструкциями.[нужна цитата ] Сложение целых чисел, например, может выполняться как отдельная машинная инструкция, а некоторые процессоры предлагать конкретные инструкции для обработки последовательностей символов с помощью одной инструкции.[нужна цитата ] В частности, C Стандарт упоминает, что «простой» объект int имеет естественный размер, предполагаемый архитектурой среды выполнения ».[нужна цитата ] Это означает, что int вероятно, будет иметь длину 32 бита в 32-битной архитектуре. Базовые примитивные типы почти всегда типы значений.

Большинство языков не позволяют программам изменять поведение или возможности примитивных (встроенных или базовых) типов данных. Исключения включают Болтовня, который позволяет расширять все типы данных в программе, добавляя операции, которые могут выполняться с ними, или даже переопределяя встроенные операции.[нужна цитата ]

Обзор

Фактический диапазон доступных примитивных типов данных зависит от конкретного используемого языка программирования. Например, в C #, струны являются составным, но встроенным типом данных, тогда как в современных диалектах БАЗОВЫЙ И в JavaScript, они уподобляются примитивному типу данных, который является как базовым, так и встроенным. [1] [2]

Классические базовые примитивные типы могут включать:

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

Струны может быть любой серией символов в используемом кодирование. Чтобы отделить строки от кода, большинство языков заключают их в одинарные или двойные кавычки. Например, «Привет, мир» или «Привет, мир». Обратите внимание, что «200» можно ошибочно принять за целочисленный тип, но на самом деле это строковый тип, поскольку он заключен в двойные кавычки.

Более сложные типы, которые могут быть встроены, включают:

Конкретные примитивные типы данных

Целые числа

An целое число тип данных представляет некоторые диапазон математических целых чисел. Целые числа могут быть знаковыми (допускаются отрицательные значения) или беззнаковыми (неотрицательные целые числа Только). Общие диапазоны:

Размер (байты )Размер (биты )ИменаПодписанный диапазон (при условии два дополнения за подписанный )Беззнаковый диапазон
1 байт8 битБайт, октет, минимальный размер char в C99 ( видеть limits.h CHAR_BIT)От −128 до +127От 0 до 255
2 байта16 битx86 слово, минимальный размер короткая и int в CОт −32 768 до +32 767От 0 до 65 535
4 байта32 битдвойное слово x86, минимальный размер длинный в C, фактический размер int для большинства современных компиляторов C,[3] указатель за IA-32 -совместимые процессорыОт −2 147 483 648 до +2 147 483 647От 0 до 4 294 967 295
8 байт64 битx86 четверное слово, минимальный размер долго долго в C, фактический размер длинный для большинства современных компиляторов C,[3] указатель для x86-64 -совместимые процессорыОт −9,223,372,036,854,775,808 до +9,223,372,036,854,775,807От 0 до 18 446 744 073 709 551 615
неограниченно / 8неограниченныйBignum–2неограниченный/ 2 в + (2неограниченный/2 − 1)От 0 до 2неограниченный − 1

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

  • 42
  • 10000
  • -233000

Существует несколько альтернативных методов записи целочисленных литералов во многих языках программирования:

  • Большинство языков программирования, особенно те, на которые C, добавьте к целочисленному литералу префикс 0X или же 0x представлять шестнадцатеричный значение, например 0xDEADBEEF. На других языках могут использоваться другие обозначения, например немного языки ассемблера добавить ЧАС или же час до конца шестнадцатеричного значения.
  • Perl, Рубин, Ява, Юля, D, Ржавчина и Python (начиная с версии 3.6) разрешить встроенные подчеркивает для ясности, например 10_000_000, и фиксированная форма Фортран игнорирует встроенные пробелы в целочисленных литералах.
  • В C и C ++, начальный ноль указывает на восьмеричный значение, например 0755. Это в первую очередь предназначалось для использования с Режимы Unix; однако его критиковали, потому что нормальные целые числа могут также начинать с нуля.[4] В качестве таких, Python, Рубин, Haskell, и OCaml префикс восьмеричных значений с 0O или же 0oв соответствии с макетом, используемым шестнадцатеричными значениями.
  • Несколько языков, в том числе Ява, C #, Scala, Python, Рубин, и OCaml, может представлять двоичные значения, добавляя к числу префикс 0B или же 0b.

Числа с плавающей запятой

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

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

Литералы для чисел с плавающей запятой включают десятичную точку и обычно используют е или же E для обозначения научных обозначений. Примеры литералов с плавающей запятой:

  • 20.0005
  • 99.9
  • -5000.12
  • 6.02e23

Некоторые языки (например, Фортран, Python, D ) также есть комплексное число тип, состоящий из двух чисел с плавающей запятой: действительной и мнимой части.

Числа с фиксированной точкой

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

Булевы

А логический тип, обычно обозначаемый "bool" или "boolean", обычно логический тип который может иметь значение «истина» или значение «ложь». Хотя необходим только один бит для установки значений «истина» и «ложь», языки программирования обычно реализуют логические типы как один или несколько байтов.

Многие языки (например, Ява, Паскаль и Ада ) реализовать логические значения, придерживаясь концепции логический как отдельный логический тип. Однако языки могут неявно преобразовывать логические значения в числовые типы иногда для предоставления расширенной семантики логическим и логическим выражениям или для достижения обратной совместимости с более ранними версиями языка. Например, ранние версии языка программирования C, последовавшие за ANSI C и в его прежних стандартах не было специального логического типа. Вместо этого числовые значения нуля интерпретируются как «ложь», а любое другое значение интерпретируется как «истина».[5] Новее C99 добавлен отдельный логический тип, который может быть включен с stdbool.h,[6] и C ++ поддерживает bool как встроенный тип и «истина» и «ложь» как зарезервированные слова.[7]

Персонажи и строки

А персонаж тип (обычно называемый "char") может содержать один письмо, цифра, знак препинания, символ, код форматирования, контрольный код или какой-либо другой специализированный код (например, метка порядка байтов ). В C, char определяется как наименьшая адресуемая единица памяти. В большинстве систем это 8 биты; Несколько стандартов, например POSIX, потребуйте, чтобы он был такого размера. Некоторые языки имеют два или более символьных типа, например однобайтовый тип для ASCII символы и многобайтовый тип для Unicode символы. Термин «символьный тип» обычно используется даже для типов, значения которых более точно представляют кодовые единицы, например UTF-16 кодовая единица, как в Ява (поддержка ограничена только 16-битными символами [8]JavaScript.

Персонажи могут быть объединены в струны. Строковые данные могут включать числа и другие числовые символы, но обрабатываются как текст. Например, математические операции, которые могут выполняться с числовым значением (например, 200), обычно не могут выполняться с тем же значением, записанным в виде строки (например, «200»).

Строки реализуются по-разному, в зависимости от языка программирования. Самый простой способ реализовать строки - создать их в виде массива символов, за которым следует символ-разделитель, используемый для обозначения конца строки, обычно NUL. Они называются строки с завершающим нулем, и обычно встречаются на языках с небольшим количеством аппаратная абстракция, Такие как C и сборка. Несмотря на простоту реализации, строки с завершающим нулем критиковались за то, что они вызывают переполнение буфера. Большинство языков сценариев высокого уровня, таких как Python, Рубин, и многие диалекты БАЗОВЫЙ, не имеют отдельного типа символа; строки длиной один обычно используются для представления отдельных символов. Некоторые языки, например C ++ и Ява, имеют возможность использовать строки с завершающим нулем (обычно для мер обратной совместимости), но дополнительно предоставляют свой собственный класс для обработки строк (std :: string и java.lang.Stringсоответственно) в стандартной библиотеке.

Также существует разница в том, являются ли строки изменяемыми или неизменный на языке. Изменяемые строки могут быть изменены после их создания, в то время как неизменяемые строки сохраняют постоянный размер и содержимое. В последнем случае единственный способ изменить строки - создать новые. У каждого подхода есть как преимущества, так и недостатки: хотя неизменяемые строки гораздо менее гибки, они проще и полностью потокобезопасный. Некоторые примеры языков, в которых используются изменяемые строки, включают C ++, Perl и Рубин, тогда как языки, которые не включают JavaScript, Lua, Python и Идти. Несколько языков, например Цель-C, укажите разные типы для изменяемых и неизменяемых строк.

Литералы для символов и строк обычно окружены кавычки: иногда одинарные кавычки (') используются для символов и двойных кавычек (") используются для строк. Python принимает любой вариант в качестве строковой записи.

Примеры символьных литералов в синтаксисе C:

Примеры строковых литералов в синтаксисе C:

  • "А"
  • "Привет, мир"
  • «Есть 4 кошки».

Диапазоны числовых типов данных

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

Диапазон переменной зависит от количества байтов, используемых для сохранения значения, и целого числа тип данных обычно может хранить 2п значения (где п это количество биты которые вносят свой вклад в ценность). Для других типов данных (например, плавающая точка values) диапазон более сложный и будет варьироваться в зависимости от метода, используемого для его хранения. Есть также некоторые типы, которые не используют целые байты, например а логический это требует одного кусочек, и представляет собой двоичный значение (хотя на практике часто используется байт, а остальные 7 бит являются избыточными). Некоторые языки программирования (например, Ада и Паскаль ) также допускают противоположное направление, то есть программист определяет диапазон и точность, необходимые для решения данной проблемы, а компилятор автоматически выбирает наиболее подходящий целочисленный тип или тип с плавающей запятой.

Смотрите также

Рекомендации

  1. ^ «Примитивные типы данных (Руководства по Java ™> Изучение языка Java> Основы языка)». docs.oracle.com. Получено 2020-05-01.
  2. ^ «Типы данных в C». Гики. 2015-06-30. Получено 2020-05-01.
  3. ^ а б Туман, Агнер (16.02.2010). «Соглашения о вызовах для различных компиляторов C ++ и операционных систем: Глава 3, Представление данных» (PDF). Получено 2010-08-30.
  4. ^ Черновик 6-го издания ECMAScript: https://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-numeric-literals В архиве 2013-12-16 в Wayback Machine
  5. ^ Керниган, Брайан В.; Ричи, Деннис М (1978). Язык программирования C (1-е изд.). Энглвуд Клиффс, Нью-Джерси: Prentice Hall. п.41. ISBN  0-13-110163-3.
  6. ^ «Библиотека поддержки логических типов». devdocs.io. Получено 15 октября, 2020.
  7. ^ «Тип данных Bool в C ++». Гики. Получено 15 октября, 2020.
  8. ^ Мансур, Умер. "Тип char в Java сломан". CodeAhoy. Получено 10 февраля 2020.

внешняя ссылка