В інформатиціпримітивні типи даних — це набір основних типів даних, з яких будуються всі інші типи даних.[1] Зокрема, це часто відноситься до обмеженого набору представлень даних, які використовуються конкретним процесором, які повинні використовувати всі скомпільовані програми. Більшість процесорів підтримують подібний набір примітивних типів даних, хоча конкретні представлення відрізняються.[2] Загалом, «примітивні типи даних» можуть стосуватися стандартних типів даних, вбудованих у мову програмування.[3][4] Типи даних, які не є примітивними, називаються похідними або складеними.[3]
Примітивні типи майже завжди є типами значень, але складені типи також можуть бути типами значень.[5]
Поширені примітивні типи даних
Набір примітивних типів даних віртуальної машини Java:[6]
Цілі типи з різними діапазонами та точністю (byte, short, int, long, char)
Значення, що стосується адреси виконуваної пам’яті. (returnAddress) Це недоступне з мови програмування Java і зазвичай не вказано.[7][8]
Ці примітивні типи, як правило, точно підтримуються апаратним забезпеченням комп’ютера, за винятком, можливо, змінних розмірів цілих чи апаратних засобів, у яких відсутня плаваюча точка. Операції над такими примітивами зазвичай досить ефективні. Примітивні типи даних, які є рідними для процесора, мають однозначну відповідність з об'єктами в пам'яті комп'ютера, і операції з цими типами часто є найшвидшими з можливих у більшості випадків.[9] Цілочисельне додавання, наприклад, може виконуватися як одна машинна інструкція, а деякі пропонують спеціальні інструкції для обробки послідовностей символів за допомогою однієї інструкції.[10] Але вибір примітивного типу даних може вплинути на продуктивність, наприклад, швидше за допомогою операцій SIMD і типів даних працювати з масивом чисел з плаваючою точкою.[9]:113
Набір базових типів даних C подібний до Java. Існує мінімум чотири типи: char, int, float, та double, але кваліфікатори short, long, signed, та unsigned означають, що C містить численні залежні від цілі цілі чи примітивні типи з плаваючою комою.[11]
подвійне слово x86, мінімальний розмір long у C, фактичний розмір int для більшості сучасних компіляторів C,[12]Вказівник для IA-32-сумісних процесорів
від −2 147 483 648 до +2 147 483 647
0 до 4 294 967 295
8 байт
64 біти
чотирикратне слово x86, мінімальний розмір long long у C, фактичний розмір long для більшості сучасних компіляторів C, [12] покажчик для x86-64 -сумісні процесори
від −9,223,372,036,854,775,808 до +9,223,372,036,854,775,807
Число з плаваючою комою представляє раціональне число обмеженої точності, яке може мати дробову частину. Ці числа зберігаються всередині у форматі, еквівалентному науковій нотації, зазвичай у двійковій, але іноді в десятковій. Оскільки числа з плаваючою комою мають обмежену точність, лише підмножина дійсних чи раціональних чисел можна точно представити; інші числа можна представити лише приблизно. Багато мов мають як одинарну точність (часто звану «float»), так і подвійну точність (часто звану «подвійною»).
Булевий тип, який зазвичай позначається як «bool» або «boolean», зазвичай є «логічним типом», який може мати значення «true» або значення «false». Хоча лише один біт необхідний для розміщення набору значень "true" і "false", мови програмування зазвичай реалізують булеві типи як один або більше байтів.
Багато мов (наприклад, Java, Pascal і Ada) реалізують булеві значення, дотримуючись концепції boolean як окремий логічний тип. Однак деякі мови іноді можуть неявно перетворювати логічні значення в «числові типи», щоб надати розширену семантику логічним значенням і логічним виразам або досягти зворотної сумісності з попередніми версіями мови. Наприклад, ранні версії мови програмування C, які слідували за ANSI C та його попередніми стандартами, не мали спеціального логічного типу. Натомість числові значення нуля інтерпретуються як «хибні», а будь-які інші значення інтерпретуються як «істинні».[13] Новіший C99 додав чітке логічне значення тип, який можна включити до stdbool.h,[14] і C++ підтримує bool як вбудований тип і "true" і "false" як зарезервовані слова.[15]
NOTATION: QName, оголошене як нотація в схемі. Нотації використовуються для вбудовування типів даних, відмінних від XML.[17] Цей тип не можна використовувати безпосередньо – можна використовувати лише похідні типи, які перераховують обмежений набір QNames.
Вбудовані типи
У JavaScript є 7 примітивних типів даних: рядок, число, bigint, логічний, невизначений, символ і нуль. Це не об’єкти й не мають методів.[18]
У Visual Basic .NET примітивні типи даних складаються з 4 інтегральних типів, 2 типів із плаваючою комою, 16-байтового десяткового типу, логічного типу, типу дати/часу, символьного типу Unicode та Тип рядка Unicode.[19]
Загалом типи даних, які можуть бути вбудовані в складні мови програмування, включають:
Тип символ — це тип, який може представляти всі символи Юнікоду, отже, має мати принаймні 21 біт. Деякі мови, такі як Julia, включають справжній 32-розрядний тип символів Unicode як примітивний.[20] Інші мови, як-от JavaScript, Python , Ruby та багато діалектів BASIC не мають примітивного типу символів, натомість додають рядки як примітивний тип даних, зазвичай з використанням кодування UTF-8. Рядки довжиною в один зазвичай використовуються для представлення окремих символів.
Деякі мови мають «символьні» або «рядкові» типи, які занадто малі, щоб представити всі символи чи рядки Unicode. Їх правильніше класифікувати як цілі типи. Наприклад, C містить тип char, але він визначений як найменша адресатна одиниця пам’яті, яка за деякими стандартами, такими як POSIX, вимагає 8 біт. Остання версія цих стандартів посилається на char як на числовий тип. char також використовується для 16-бітного цілого типу в Java, але знову ж таки це не тип символів Unicode.[21] Деяке комп’ютерне обладнання має кілька інструкцій, які стосуються «рядків», які стосуються послідовності байтів. Наприклад, x86-64 може переміщувати, встановлювати, шукати або порівнювати послідовність елементів, де елемент може мати довжину 1, 2, 4 або 8 байтів.[22]
Діапазон
Тип числових даних діапазон має максимальне та мінімальне значення, вбудовані в тип. Він включений до деяких мов, таких як Ada і Pascal. Спроба зберегти число за межами діапазону може призвести до помилок компілятора/виконання або до неправильних обчислень (через усічення) залежно від мови, яка використовується. На практиці компілятор автоматично вибирає найбільш відповідний примітивний цілий тип або тип з плаваючою комою.
↑Lindholm, Tim; Yellin, Frank; Bracha, Gilad; Buckley, Alex (13 лютого 2015). Chapter 2. The Structure of the Java Virtual Machine. The Java® Virtual Machine Specification.
↑Kernighan, Brian W.; Ritchie, Dennis M. (1988). 2.2 Data Types and Sizes. The C programming language (вид. Second). Englewood Cliffs, N.J. с. 36. ISBN0131103709.
↑ абFog, Agner (16 лютого 2010). [http: //www.agner.org/optimize/calling_conventions.pdf Умови виклику для різних компіляторів і операційних систем C++: Розділ 3, Представлення даних] (PDF). Процитовано 30 серпня 2010.