Примитивный тип данных
В информатике , примитивные типы данных — это набор базовых типов данных из которых конструируются все остальные типы данных. [1] В частности, это часто относится к ограниченному набору представлений данных, используемых конкретным процессором , который должны использовать все скомпилированные программы. Большинство процессоров поддерживают аналогичный набор примитивных типов данных, хотя конкретные представления различаются. [2] В более общем смысле «примитивные типы данных» могут относиться к стандартным типам данных, встроенным в язык программирования ( встроенные типы ). [3] [4] Типы данных, которые не являются примитивными, называются производными или составными . [3]
Примитивные типы почти всегда являются типами значений , но составные типы также могут быть типами значений. [5]
Общие примитивные типы данных
[ редактировать ]Наиболее распространенными примитивными типами являются те, которые используются и поддерживаются компьютерным оборудованием, например целые числа различных размеров, числа с плавающей запятой и логические логические значения. Операции с такими типами обычно весьма эффективны. Примитивные типы данных, которые являются собственными для процессора, имеют взаимно однозначное соответствие с объектами в памяти компьютера, и операции с этими типами в большинстве случаев часто являются максимально быстрыми. [6] Например, сложение целых чисел может выполняться как одна машинная инструкция, а некоторые предлагают специальные инструкции для обработки последовательностей символов с помощью одной инструкции. [7] Но выбор примитивного типа данных может повлиять на производительность, например, быстрее использовать операции SIMD и типы данных для работы с массивом чисел с плавающей запятой. [6] : 113
Целые числа
[ редактировать ]Целочисленный диапазон тип данных представляет собой некоторый математических целых чисел. Целые числа могут быть либо знаковыми (допускаются отрицательные значения), либо беззнаковыми ( только неотрицательные целые числа ). Общие диапазоны:
Размер ( байты ) | Размер ( бит ) | Имена | Знаковый диапазон ( представление в виде дополнения до двух ) | Беззнаковый диапазон |
---|---|---|---|---|
1 байт | 8 бит | Байт , октет , минимальный размер char в C99 (см. Limits.h CHAR_BIT) | от −128 до +127 | от 0 до 255 |
2 байта | 16 бит | x86 слово , минимальный размер short и int в С | от −32 768 до +32 767 | от 0 до 65 535 |
4 байта | 32 бита | двойное слово x86, минимальный размер long в C, реальный размер int для большинства современных компиляторов C, [8] указатель для IA-32- совместимых процессоров | от −2 147 483 648 до +2 147 483 647 | от 0 до 4 294 967 295 |
8 байт | 64 бита | Четверное слово x86, минимальный размер long long в C, реальный размер long для большинства современных компиляторов C, [8] указатель для x86-64 -совместимых процессоров | от −9 223 372 036 854 775 808 до +9 223 372 036 854 775 807 | от 0 до 18 446 744 073 709 551 615 |
Числа с плавающей запятой
[ редактировать ]Число с плавающей запятой ограниченной точности представляет собой рациональное число , которое может иметь дробную часть. Эти числа хранятся внутри в формате, эквивалентном научной записи , обычно в двоичном формате , но иногда и в десятичном . только подмножество действительных или рациональных Поскольку числа с плавающей запятой имеют ограниченную точность, точно представимо чисел; остальные числа могут быть представлены лишь приблизительно. Многие языки имеют как тип одинарной точности (часто называемый «float»), так и тип двойной точности (часто называемый «double»).
логические значения
[ редактировать ]Логический тип , обычно обозначаемый «bool» или «boolean», обычно представляет собой логический тип , который может иметь значение «истина» или значение «ложь». Хотя для размещения набора значений «истина» и «ложь» необходим только один бит, языки программирования обычно реализуют логические типы в виде одного или нескольких байтов.
Многие языки (например, Java , Pascal и Ada ) реализуют логические значения, придерживаясь концепции логического значения как отдельного логического типа. Однако некоторые языки могут время от времени неявно преобразовывать логические значения в числовые типы , чтобы придать расширенную семантику логическим значениям и логическим выражениям или обеспечить обратную совместимость с более ранними версиями языка. Например, ранние версии языка программирования C, последовавшие за ANSI C и его прежними стандартами, не имели специального логического типа. Вместо этого числовые значения нуля интерпретируются как «ложь», а любое другое значение интерпретируется как «истина». [9] В более новом C99 добавлен отдельный логический тип. _Bool
(более интуитивное название bool
а также макросы true
и false
может быть включен в stdbool.h ), [10] и C++ поддерживает bool
как встроенный тип, а «истина» и «ложь» — как зарезервированные слова. [11]
Конкретные языки
[ редактировать ]Ява
[ редактировать ]Набор Java состоит из: примитивных типов данных виртуальной машины [12]
byte
,short
,int
,long
,char
( целочисленные типы с различными диапазонами)float
иdouble
числа с плавающей запятой одинарной и двойной точностиboolean
, логический тип с логическими значениямиtrue
иfalse
returnAddress
, значение, относящееся к адресу исполняемой памяти. Это недоступно из языка программирования Java и обычно опускается. [13] [14]
Основные типы C
[ редактировать ]Набор основных типов данных C аналогичен Java. Минимально существует четыре типа: char
, int
, float
, и double
, но квалификаторы short
, long
, signed
, и unsigned
означают, что C содержит множество целочисленных примитивных типов и примитивных типов с плавающей запятой, зависящих от цели. [15] C99 расширил этот набор, добавив логический тип. _Bool
и разрешить модификатор long
использоваться дважды в сочетании с int
(например long long int
). [16]
XML-схема
[ редактировать ]Язык определения схемы XML предоставляет набор из 19 примитивных типов данных: [17]
string
: строка , последовательность кодовых точек Юникода.boolean
: логическое значениеdecimal
: число, представленное десятичной записьюfloat
иdouble
: с плавающей запятой числаduration
,dateTime
,time
,date
,gYearMonth
,gYear
,gMonthDay
,gDay
, иgMonth
: Календарные даты и времяhexBinary
иbase64Binary
: двоичные данные , закодированные в шестнадцатеричном формате или в формате Base64.anyURI
: URIQName
: квалифицированное имяNOTATION
: QName, объявленное как обозначение в схеме. Нотации используются для внедрения типов данных, отличных от XML. [18] Этот тип нельзя использовать напрямую — можно использовать только производные типы, перечисляющие ограниченный набор QNames.
JavaScript
[ редактировать ]В JavaScript существует 7 примитивных типов данных: строка, число, bigint, логическое значение, символ, неопределенное и ноль. [19] Их значения считаются неизменными . Это не объекты и не имеют методов или свойств ; однако все примитивы, кроме undefine и null, имеют оболочки объектов . [20]
Визуальный Бейсик .NET
[ редактировать ]В Visual Basic .NET примитивные типы данных состоят из 4 целочисленных типов, 2 типов с плавающей запятой, 16-байтового десятичного типа, логического типа, типа даты/времени, символьного типа Юникода и строкового типа Юникода. [21]
Ржавчина
[ редактировать ]В Rust есть примитивные целые числа фиксированной ширины без знака и со знаком в формате u
или i
соответственно, за которым следует любая разрядность, равная степени двойки между 8
и 128
давая типы u8
, u16
, u32
, u64
, u128
, i8
, i16
, i32
, i64
и i128
. [22] Также доступны типы usize
и isize
которые представляют собой целые числа без знака и со знаком, имеющие ту же разрядность, что и ссылка с usize
type используется для индексов в массивах и индексируемых типах коллекций. [22]
В Русте также есть:
bool
для логического типа. [22]f32
иf64
для 32- и 64-битных чисел с плавающей запятой . [22]char
для символа Юникода . Под капотом это беззнаковые 32-битные целые числа со значениями, соответствующимиchar
кодовая точка, но действительными являются только значения, соответствующие допустимому скалярному значению Юникода. [22]
Встроенные типы
[ редактировать ]Встроенные типы отличаются от других наличием специальной поддержки в компиляторе или во время выполнения до такой степени, что их невозможно просто определить в заголовочном файле или модуле стандартной библиотеки. [23] Помимо целых чисел, чисел с плавающей запятой и логических значений, к другим встроенным типам относятся:
- Тип void и тип нулевого указателя
nullptr_t
на C++ и C23 - Символы и строки (см. ниже )
- Кортеж в Standard ML , Python , Scala , Swift , Elixir
- Список в Common Lisp , Python , Scheme , Haskell
- Число с фиксированной точкой , различной точностью выбираемым программистом и масштабом, .
- Комплексное число в C99 , Fortran , Common Lisp , Python , D , Go . Это два числа с плавающей запятой: действительная и мнимая части.
- Рациональное число в Common Lisp
- Произвольная точность
Integer
введите Common Lisp , Erlang , Haskell - Ассоциативные массивы , записи и/или наборы в Perl , PHP , Python , Ruby , JavaScript , Lua , D , Go
- Ссылка (также называемая указателем , дескриптором или дескриптором ),
- Символы в Лиспе
- Первоклассная функция во всех функциональных языках: JavaScript , Lua , D , Go и в новых стандартах C++ , Java , C# , Perl.
Символы и строки
[ редактировать ]Тип символа — это тип, который может представлять все символы Юникода , поэтому его ширина должна быть не менее 21 бита. Некоторые языки, такие как Julia, включают в себя настоящий 32-битный тип символов Юникода в качестве примитива. [24] Другие языки, такие как JavaScript , Python , Ruby и многие диалекты BASIC, не имеют примитивного типа символов, а вместо этого добавляют строки в качестве примитивного типа данных, обычно используя кодировку UTF-8 . Строки длиной в единицу обычно используются для представления отдельных символов.
В некоторых языках есть типы «символов», которые слишком малы для представления всех символов Юникода. Их правильнее отнести к целочисленным типам, которым присвоено вводящее в заблуждение имя. Например, C включает в себя char
тип, но он определяется как наименьшая адресуемая единица памяти, которая по некоторым стандартам (например, POSIX ) требует, чтобы она была 8- битной . Последние версии этих стандартов относятся к char
как числовой тип. char
также используется для 16-битного целочисленного типа в Java , но опять же, это не тип символа Юникода. [25]
Термин «строка» также не всегда относится к последовательности символов Юникода, а относится к последовательности байтов. Например, в x86-64 есть «строковые» инструкции для перемещения, установки, поиска или сравнения последовательности элементов, причем длина элемента может составлять 1, 2, 4 или 8 байт. [26]
См. также
[ редактировать ]- Язык примитивный
- Список структур данных § Типы данных
- Тип объекта
- Примитивный класс-оболочка
- Переменная (информатика)
Ссылки
[ редактировать ]- ^ Стоун, Р.Г.; Кук, ди-джей (5 февраля 1987 г.). Программа «Строительство» . Издательство Кембриджского университета. п. 18. ISBN 978-0-521-31883-9 .
- ^ Викандер, Ян; Свенссон, Бертиль (31 мая 1998 г.). Системы реального времени в мехатронных приложениях . Springer Science & Business Media. п. 101. ИСБН 978-0-7923-8159-4 .
- ^ Jump up to: а б Хурана, Рохит. Структура данных и файлов (для GTU), 2-е издание . Издательство Викас. п. 2. ISBN 978-93-259-6005-3 .
- ^ Чун, Уэсли (2001). Базовое программирование на Python . Прентис Холл Профессионал. п. 77. ИСБН 978-0-13-026036-9 .
- ^ Олсен, Гейр; Эллисон, Дэймон; Спир, Джеймс (1 января 2008 г.). Справочник по проектированию классов Visual Basic .NET: Программирование эффективных классов . Апресс. п. 80. ИСБН 978-1-4302-0780-1 .
- ^ Jump up to: а б Туман, Агнер. «Оптимизация программного обеспечения на C++» (PDF) . п. 29 . Проверено 28 января 2022 г.
Целочисленные операции в большинстве случаев выполняются быстро, [...]
- ^ «Одна инструкция, отдельные данные — обзор | Темы ScienceDirect» .
- ^ Jump up to: а б Туман, Агнер (16 февраля 2010 г.). «Соглашения о вызовах для различных компиляторов и операционных систем C++: Глава 3, Представление данных» (PDF) . Проверено 30 августа 2010 г.
- ^ Керниган, Брайан В .; Ричи, Деннис М (1978). Язык программирования C (1-е изд.). Энглвуд Клиффс, Нью-Джерси : Прентис Холл . п. 41 . ISBN 0-13-110163-3 .
- ^ «Библиотека поддержки логических типов» . devdocs.io . Проверено 15 октября 2020 г.
- ^ «Тип данных Bool в C++» . Гики для Гиков . 5 июня 2017 года . Проверено 15 октября 2020 г.
- ^ Линдхольм, Тим; Йеллин, Фрэнк; Браха, Гилад; Бакли, Алекс (13 февраля 2015 г.). «Глава 2. Структура виртуальной машины Java». Спецификация виртуальной машины Java® .
- ^ Коуэлл, Джон (18 февраля 1997 г.). Essential Java Fast: Как написать объектно-ориентированное программное обеспечение для Интернета . Springer Science & Business Media. п. 27. ISBN 978-3-540-76052-8 .
- ^ Ракшит, Сандип; Паниграхи, Гутам (декабрь 1995 г.). Справочник по объектно-ориентированному программированию на Java . Издательство С. Чанд. п. 11. ISBN 978-81-219-3001-7 .
- ^ Керниган, Брайан В.; Ричи, Деннис М. (1988). «2.2 Типы и размеры данных». Язык программирования C (Второе изд.). Энглвуд Клиффс, Нью-Джерси с. 36. ISBN 0131103709 .
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка ) - ^ Спецификация ISO/IEC 9899:1999, TC3 (PDF) . п. 255, § 6.2.5 Виды .
- ^ Бирон, Пол В.; Малхотра, Ашок. «XML-схема, часть 2: типы данных» . www.w3.org (Второе изд.) . Проверено 29 января 2022 г.
- ^ Филлипс, Ли Энн (18 января 2002 г.). «Объявление НОТАЦИИ | Понимание определений типов XML-документов» . www.informit.com . Проверено 29 января 2022 г.
- ^ «Примитив — Глоссарий веб-документов MDN: определения терминов, связанных с Интернетом» . МДН. 8 июня 2023 г.
- ^ «Типы данных и структуры данных JavaScript» . МДН. 9 июля 2024 г.
- ^ «Типы в Visual Basic» . Документы Майкрософт . 18 сентября 2021 г. Проверено 18 мая 2022 г.
- ^ Jump up to: а б с д и «Типы данных — язык программирования Rust» . doc.rust-lang.org . Проверено 17 октября 2023 г.
- ^ «Встроенные типы (C++)» . Learn.microsoft.com . 17 августа 2021 г.
- ^ «Струны · Язык Джулии» . docs.julialang.org . Проверено 29 января 2022 г.
- ^ Мансур, Умер (8 мая 2016 г.). «Тип char в Java неверен» . КодАхой . Проверено 10 февраля 2020 г.
- ^ «Ввод-вывод и строковые инструкции» . Проверено 29 января 2022 г.
Внешние ссылки
[ редактировать ]- СМИ, связанные с примитивными типами, на Викискладе?