В информатике примитивные типы данных — это набор базовых типов данных , из которых строятся все остальные типы данных. [1] В частности, это часто относится к ограниченному набору представлений данных, используемых определенным процессором , которые должны использовать все скомпилированные программы. Большинство процессоров поддерживают аналогичный набор примитивных типов данных, хотя конкретные представления различаются. [2] В более общем смысле примитивные типы данных могут относиться к стандартным типам данных, встроенным в язык программирования ( встроенные типы ). [3] [4] Типы данных, которые не являются примитивными, называются производными или составными . [3]
Примитивные типы почти всегда являются типами значений , но составные типы также могут быть типами значений. [5]
Наиболее распространенными примитивными типами являются те, которые используются и поддерживаются компьютерным оборудованием, например, целые числа различных размеров, числа с плавающей точкой и логические булевы значения. Операции над такими типами обычно довольно эффективны. Примитивные типы данных, которые являются собственными для процессора, имеют однозначное соответствие с объектами в памяти компьютера, и операции над этими типами часто являются самыми быстрыми из возможных в большинстве случаев. [6] Например, сложение целых чисел может быть выполнено как одна машинная инструкция, а некоторые предлагают специальные инструкции для обработки последовательностей символов с помощью одной инструкции. [7] Но выбор примитивного типа данных может повлиять на производительность, например, быстрее использовать операции SIMD и типы данных для работы с массивом чисел с плавающей точкой. [6] : 113
Целочисленный тип данных представляет некоторый диапазон математических целых чисел. Целые числа могут быть либо знаковыми (допускающими отрицательные значения), либо беззнаковыми ( только неотрицательные целые числа ). Обычные диапазоны:
Число с плавающей точкой представляет собой рациональное число ограниченной точности , которое может иметь дробную часть. Эти числа хранятся внутри в формате, эквивалентном научной записи , обычно в двоичной , но иногда в десятичной системе . Поскольку числа с плавающей точкой имеют ограниченную точность, только подмножество действительных или рациональных чисел может быть представлено точно; другие числа могут быть представлены только приблизительно. Во многих языках есть как тип одинарной точности (часто называемый float ), так и тип двойной точности (часто называемый double ).
Тип Boolean , обычно обозначаемый как bool или boolean , обычно является логическим типом , который может иметь либо значение true , либо значение false . Хотя для размещения набора значений true и false необходим только один бит , языки программирования обычно реализуют типы Boolean как один или несколько байтов.
Многие языки (например, Java , Pascal и Ada ) реализуют булевы типы, придерживаясь концепции Boolean как отдельного логического типа. Однако некоторые языки могут неявно преобразовывать Boolean в числовые типы время от времени, чтобы придать расширенную семантику Boolean и Boolean выражениям или достичь обратной совместимости с более ранними версиями языка. Например, ранние версии языка программирования C, которые следовали ANSI C и его прежним стандартам, не имели выделенного Boolean типа. Вместо этого числовые значения, равные нулю, интерпретируются как false , а любое другое значение интерпретируется как true . [9] В более новом C99 был добавлен отдельный Boolean тип _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 расширил этот набор, добавив тип Boolean и разрешив использовать _Bool
модификатор дважды в сочетании с (например, ). [16]long
int
long long int
Язык определения схемы XML предоставляет набор из 19 примитивных типов данных: [17]
string
: строка , последовательность кодовых точек Unicodeboolean
: логическое значениеdecimal
: число, представленное в десятичной системе счисленияfloat
и double
: числа с плавающей точкойduration
, dateTime
, time
, date
, gYearMonth
, gYear
, gMonthDay
, gDay
, и gMonth
: Календарные даты и времяhexBinary
и base64Binary
: двоичные данные , закодированные в шестнадцатеричном формате или Base64anyURI
: URIQName
: квалифицированное имяNOTATION
: QName, объявленный как нотация в схеме. Нотации используются для встраивания не-XML типов данных. [18] Этот тип не может использоваться напрямую — могут использоваться только производные типы, которые перечисляют ограниченный набор QNames.В JavaScript существует 7 примитивных типов данных: string, number, bigint, boolean, symbol, undefined и null. [19] Их значения считаются неизменяемыми . Они не являются объектами и не имеют методов или свойств ; однако все примитивы, кроме undefined и null, имеют объектные оболочки. [20]
В Visual Basic .NET примитивные типы данных состоят из 4 целочисленных типов, 2 типов с плавающей точкой, 16-байтового десятичного типа, логического типа, типа даты/времени, символьного типа Unicode и строкового типа Unicode. [21]
Rust имеет примитивные беззнаковые и знаковые целые числа фиксированной ширины в формате u
или i
соответственно, за которыми следует любая битовая ширина, которая является степенью двух между 8
и , что 128
дает типы u8
, u16
, u32
, u64
, u128
, i8
, i16
, i32
, i64
и i128
. [22] Также доступны типы usize
и , isize
которые являются беззнаковыми и знаковыми целыми числами, которые имеют ту же битовую ширину, что и ссылка, причем usize
тип используется для индексов в массивах и индексируемых типах коллекций. [22]
Rust также имеет:
bool
для булевого типа. [22]f32
и f64
для 32- и 64-битных чисел с плавающей точкой . [22]char
для символа Unicode . Под капотом это беззнаковые 32-битные целые числа со значениями, которые соответствуют char
кодовой точке, но действительными являются только значения, которые соответствуют допустимому скалярному значению Unicode. [22]Встроенные типы отличаются от других наличием особой поддержки в компиляторе или среде выполнения, в той степени, в которой их было бы невозможно просто определить в заголовочном файле или стандартном библиотечном модуле. [23] Помимо целых чисел, чисел с плавающей точкой и булевых значений, другие встроенные типы включают в себя:
nullptr_t
в C++11 и C23Integer
в Common Lisp , Erlang , HaskellТип символа — это тип, который может представлять все символы Unicode , поэтому должен быть шириной не менее 21 бита. Некоторые языки, такие как Julia, включают настоящий 32-битный тип символа Unicode в качестве примитива. [24] Другие языки, такие как JavaScript , Python , Ruby и многие диалекты BASIC, не имеют примитивного типа символа, но вместо этого добавляют строки в качестве примитивного типа данных, обычно используя кодировку UTF-8 . Строки длиной в один обычно используются для представления отдельных символов.
В некоторых языках есть типы символов , которые слишком малы для представления всех символов Unicode. Их правильнее отнести к целочисленным типам, которым дали вводящее в заблуждение название. Например, в языке C есть тип char
, но он определен как наименьшая адресуемая единица памяти, которая, согласно нескольким стандартам (например, POSIX ), должна быть 8 бит . Последние версии этих стандартов называют char
его числовым типом. char
также используется для 16-битного целочисленного типа в Java , но, опять же, это не тип символа Unicode. [25]
Термин строка также не всегда относится к последовательности символов Unicode, а относится к последовательности байтов. Например, x86-64 имеет строковые инструкции для перемещения, установки, поиска или сравнения последовательности элементов, где элемент может быть длиной 1, 2, 4 или 8 байтов. [26]
Целочисленные операции в большинстве случаев выполняются быстро, [...]
{{cite book}}
: CS1 maint: отсутствует местоположение издателя ( ссылка )