В информатике примитивные типы данных — это набор базовых типов данных , из которых конструируются все остальные типы данных. [1] В частности, это часто относится к ограниченному набору представлений данных, используемых конкретным процессором , который должны использовать все скомпилированные программы. Большинство процессоров поддерживают аналогичный набор примитивных типов данных, хотя конкретные представления различаются. [2] В более общем смысле, «примитивные типы данных» могут относиться к стандартным типам данных, встроенным в язык программирования ( встроенные типы ). [3] [4] Типы данных, которые не являются примитивными, называются производными или составными . [3]
Примитивные типы почти всегда являются типами значений , но составные типы также могут быть типами значений. [5]
Наиболее распространенными примитивными типами являются те, которые используются и поддерживаются компьютерным оборудованием, например целые числа различных размеров, числа с плавающей запятой и логические логические значения. Операции с такими типами обычно весьма эффективны. Примитивные типы данных, которые являются собственными для процессора, имеют взаимно однозначное соответствие с объектами в памяти компьютера, и операции с этими типами в большинстве случаев часто выполняются максимально быстро. [6] Например, сложение целых чисел может выполняться как одна машинная инструкция, а некоторые предлагают специальные инструкции для обработки последовательностей символов с помощью одной инструкции. [7] Но выбор примитивного типа данных может повлиять на производительность, например, использование операций SIMD и типов данных быстрее для работы с массивом чисел с плавающей запятой. [6] : 113
Целочисленный тип данных представляет собой некоторый диапазон математических целых чисел. Целые числа могут быть либо знаковыми (допускаются отрицательные значения), либо беззнаковыми ( только неотрицательные целые числа ). Общие диапазоны:
Число с плавающей запятой представляет собой рациональное число ограниченной точности , которое может иметь дробную часть. Эти числа хранятся внутри в формате, эквивалентном научной записи , обычно в двоичном формате , но иногда и в десятичном . Поскольку числа с плавающей запятой имеют ограниченную точность, точно представимо только подмножество действительных или рациональных чисел; остальные числа могут быть представлены лишь приблизительно. Многие языки имеют как тип одинарной точности (часто называемый «float»), так и тип двойной точности (часто называемый «double»).
Логический тип, обычно обозначаемый «bool» или « boolean», обычно представляет собой логический тип , который может иметь значение «истина» или значение «ложь». Хотя для размещения набора значений «истина» и «ложь» необходим только один бит, языки программирования обычно реализуют логические типы в виде одного или нескольких байтов.
Многие языки (например , Java , Pascal и Ada ) реализуют логические значения, придерживаясь концепции логического значения как отдельного логического типа. Однако некоторые языки могут время от времени неявно преобразовывать логические значения в числовые типы , чтобы придать расширенную семантику логическим значениям и логическим выражениям или обеспечить обратную совместимость с более ранними версиями языка. Например, ранние версии языка программирования C, последовавшие за ANSI C и его прежними стандартами, не имели специального логического типа. Вместо этого числовые значения нуля интерпретируются как «ложь», а любое другое значение интерпретируется как «истина». [9] В более новой версии C99 добавлен отдельный логический тип _Bool
(более интуитивное имя bool
, а также макросы, которые true
можно false
включить в stdbool.h ), [10] и C++ поддерживает bool
как встроенный тип, так и «true» и «false». "как зарезервированные слова. [11]
Набор примитивных типов данных виртуальной машины Java состоит из: [12]
byte
, short
, int
, long
, char
( целочисленные типы с различными диапазонами)float
и числа с плавающей запятой одинарной и двойной точностиdouble
.boolean
, логический тип с логическими значениями true
иfalse
returnAddress
, значение, относящееся к адресу исполняемой памяти. Это недоступно из языка программирования Java и обычно опускается. [13] [14]Набор основных типов данных C аналогичен Java. Минимально существует четыре типа: char
, int
, float
, и double
, но квалификаторы short
, long
, signed
и unsigned
означают, что C содержит множество зависящих от цели целочисленных типов и примитивных типов с плавающей запятой. [15] C99 расширил этот набор, добавив логический тип и позволив использовать _Bool
модификатор дважды в сочетании с (например, ). [16]long
int
long long int
Язык определения схемы 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 существует 7 примитивных типов данных: строка, число, bigint, логическое значение, неопределенное, символ и ноль. Это не объекты и не имеют методов. [19]
В Visual Basic .NET примитивные типы данных состоят из 4 целочисленных типов, 2 типов с плавающей запятой, 16-байтового десятичного типа, логического типа, типа даты/времени, символьного типа Юникода и строкового типа Юникода. [20]
В Rust есть примитивные целые числа фиксированной ширины без знака и со знаком в формате u
или, соответственно i
, за которыми следует любая разрядность, равная степени двойки между ними 8
и 128
дающая типы u8
, u16
, u32
, u64
, u128
, i8
, i16
, i32
и i64
. [21] Также доступны типы и , которые представляют собой целые числа без знака и со знаком, имеющие ту же разрядность, что и ссылка, причем тип используется для индексов в массивах и индексируемых типах коллекций. [21]i128
usize
isize
usize
В Русте также есть:
bool
для логического типа. [21]f32
и f64
для 32- и 64-битных чисел с плавающей запятой . [21]char
для символа Юникода . Под капотом это 32-битные целые числа без знака, значения которых соответствуют char
кодовой точке , но допустимы только значения, соответствующие допустимому скалярному значению Юникода. [21]Встроенные типы отличаются от других наличием специальной поддержки в компиляторе или во время выполнения до такой степени, что их невозможно просто определить в заголовочном файле или модуле стандартной библиотеки. [22] Помимо целых чисел, чисел с плавающей запятой и логических значений, к другим встроенным типам относятся:
nullptr_t
в C++ и C23.Integer
в Common Lisp , Erlang , HaskellТип символа — это тип, который может представлять все символы Юникода , поэтому его ширина должна быть не менее 21 бита. Некоторые языки, такие как Julia, включают в себя настоящий 32-битный тип символов Юникода в качестве примитива. [23] Другие языки, такие как JavaScript , Python , Ruby и многие диалекты BASIC , не имеют примитивного типа символов, а вместо этого добавляют строки в качестве примитивного типа данных, обычно используя кодировку UTF-8 . Строки длиной в единицу обычно используются для представления отдельных символов.
В некоторых языках есть типы «символов», которые слишком малы для представления всех символов Юникода. Их правильнее отнести к целочисленным типам, которым присвоено вводящее в заблуждение имя. Например, C включает char
тип, но он определен как наименьшая адресуемая единица памяти, которая, согласно некоторым стандартам (например, POSIX ), должна быть 8 бит . Последние версии этих стандартов относятся к char
числовому типу. char
также используется для 16-битного целочисленного типа в Java , но опять же, это не тип символа Юникода. [24]
Термин «строка» также не всегда относится к последовательности символов Юникода, а относится к последовательности байтов. Например, в x86-64 есть «строковые» инструкции для перемещения, установки, поиска или сравнения последовательности элементов, причем длина элемента может составлять 1, 2, 4 или 8 байт. [25]
Целочисленные операции в большинстве случаев выполняются быстро, [...]
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка )