Примітивний тип даних

Матеріал з Вікіпедії — вільної енциклопедії.
Перейти до навігації Перейти до пошуку

В інформатиці примітивні типи даних — це набір основних типів даних, з яких будуються всі інші типи даних.[1] Зокрема, це часто відноситься до обмеженого набору представлень даних, які використовуються конкретним процесором, які повинні використовувати всі скомпільовані програми. Більшість процесорів підтримують подібний набір примітивних типів даних, хоча конкретні представлення відрізняються.[2] Загалом, «примітивні типи даних» можуть стосуватися стандартних типів даних, вбудованих у мову програмування.[3][4] Типи даних, які не є примітивними, називаються похідними або складеними.[3]

Примітивні типи майже завжди є типами значень, але складені типи також можуть бути типами значень.[5]

Поширені примітивні типи даних[ред. | ред. код]

Набір примітивних типів даних віртуальної машини Java:[6]

  • Цілі типи з різними діапазонами та точністю (byte, short, int, long, char)
  • Число з рухомою комою з одинарною або подвійною точністю; (float, double)
  • Булеві, логічні значення true та false. (boolean)
  • Значення, що стосується адреси виконуваної пам’яті. (returnAddress) Це недоступне з мови програмування Java і зазвичай не вказано.[7][8]

Ці примітивні типи, як правило, точно підтримуються апаратним забезпеченням комп’ютера, за винятком, можливо, змінних розмірів цілих чи апаратних засобів, у яких відсутня плаваюча точка. Операції над такими примітивами зазвичай досить ефективні. Примітивні типи даних, які є рідними для процесора, мають однозначну відповідність з об'єктами в пам'яті комп'ютера, і операції з цими типами часто є найшвидшими з можливих у більшості випадків.[9] Цілочисельне додавання, наприклад, може виконуватися як одна машинна інструкція, а деякі пропонують спеціальні інструкції для обробки послідовностей символів за допомогою однієї інструкції.[10] Але вибір примітивного типу даних може вплинути на продуктивність, наприклад, швидше за допомогою операцій SIMD і типів даних працювати з масивом чисел з плаваючою точкою.[9]:113

Набір базових типів даних C подібний до Java. Існує мінімум чотири типи: char, int, float, та double, але кваліфікатори short, long, signed, та unsigned означають, що C містить численні залежні від цілі цілі чи примітивні типи з плаваючою комою.[11]

Цілі числа[ред. | ред. код]

Докладніше: Цілі числа

Тип даних ціле представляє деякий діапазон цілих математичних чисел. Цілі числа можуть бути або зі знаком (допускаються від’ємні значення), або без знаку (тільки невід’ємні цілі числа). Загальні діапазони:

Розмір (Байт) Розмір (Біт) імена Подання зі знаком (подання доповнення до двох) Беззнаковий діапазон
1 байт 8 біт Byte, octet, мінімальний розмір char у C99( див. limits.h CHAR_BIT ) від −128 до +127 від 0 до 255
2 байти 16 біт x86 слово, мінімальний розмір short та int у C від −32,768 до +32,767 від 0 до 65 535
4 байти 32 біти подвійне слово 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 0 до 18,446,744,073,709,551,615

Числа з плаваючою комою[ред. | ред. код]

Число з плаваючою комою представляє раціональне число обмеженої точності, яке може мати дробову частину. Ці числа зберігаються всередині у форматі, еквівалентному науковій нотації, зазвичай у двійковій, але іноді в десятковій. Оскільки числа з плаваючою комою мають обмежену точність, лише підмножина дійсних чи раціональних чисел можна точно представити; інші числа можна представити лише приблизно. Багато мов мають як одинарну точність (часто звану «float»), так і подвійну точність (часто звану «подвійною»).

Логічні значення[ред. | ред. код]

Булевий тип, який зазвичай позначається як «bool» або «boolean», зазвичай є «логічним типом», який може мати значення «true» або значення «false». Хоча лише один біт необхідний для розміщення набору значень "true" і "false", мови програмування зазвичай реалізують булеві типи як один або більше байтів.

Багато мов (наприклад, Java, Pascal і Ada) реалізують булеві значення, дотримуючись концепції boolean як окремий логічний тип. Однак деякі мови іноді можуть неявно перетворювати логічні значення в «числові типи», щоб надати розширену семантику логічним значенням і логічним виразам або досягти зворотної сумісності з попередніми версіями мови. Наприклад, ранні версії мови програмування C, які слідували за ANSI C та його попередніми стандартами, не мали спеціального логічного типу. Натомість числові значення нуля інтерпретуються як «хибні», а будь-які інші значення інтерпретуються як «істинні».[13] Новіший C99 додав чітке логічне значення тип, який можна включити до stdbool.h,[14] і C++ підтримує bool як вбудований тип і "true" і "false" як зарезервовані слова.[15]

Схема XML[ред. | ред. код]

Мова XML Schema Definition надає набір із 19 простих типів даних:[16]

  • рядок: рядок, послідовність Кодова точка Unicode
  • boolean: boolean
  • decimal: число, представлене за допомогою десяткового.
  • float і double: числа з рухомою комою.
  • тривалість, dateTime, time, date, gYearMonth, gYear , gMonthDay, gDay і gMonth: Календарна дата і час
  • hexBinary і base64Binary: двійкові дані закодовані як шістнадцятковий або Base64
  • anyURI: a URI
  • QName: кваліфіковане ім’я
  • 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. Спроба зберегти число за межами діапазону може призвести до помилок компілятора/виконання або до неправильних обчислень (через усічення) залежно від мови, яка використовується. На практиці компілятор автоматично вибирає найбільш відповідний примітивний цілий тип або тип з плаваючою комою.

Дивитися також[ред. | ред. код]

Примітки[ред. | ред. код]

  1. Stone, R. G.; Cooke, D. J. (5 лютого 1987). Program Construction (англ.). Cambridge University Press. с. 18. ISBN 978-0-521-31883-9.
  2. Wikander, Jan; Svensson, Bertil (31 травня 1998). Real-Time Systems in Mechatronic Applications (англ.). Springer Science & Business Media. с. 101. ISBN 978-0-7923-8159-4.
  3. а б Khurana, Rohit. Data and File Structure (For GTU), 2nd Edition (англ.). Vikas Publishing House. с. 2. ISBN 978-93-259-6005-3.
  4. Chun, Wesley (2001). Core Python Programming (англ.). Prentice Hall Professional. с. 77. ISBN 978-0-13-026036-9.
  5. Olsen, Geir; Allison, Damon; Speer, James (1 січня 2008). Visual Basic .NET Class Design Handbook: Coding Effective Classes (англ.). Apress. с. 80. ISBN 978-1-4302-0780-1.
  6. Lindholm, Tim; Yellin, Frank; Bracha, Gilad; Buckley, Alex (13 лютого 2015). Chapter 2. The Structure of the Java Virtual Machine. The Java® Virtual Machine Specification.
  7. Cowell, John (18 лютого 1997). Essential Java Fast: How to write object oriented software for the Internet (англ.). Springer Science & Business Media. с. 27. ISBN 978-3-540-76052-8.
  8. Rakshit, Sandip; Panigrahi, Goutam (December 1995). A Hand Book of Objected Oriented Programming With Java (англ.). S. Chand Publishing. с. 11. ISBN 978-81-219-3001-7.
  9. а б Fog, Agner. Optimizing software in C++ (PDF). с. 29. Процитовано 28 січня 2022. Integer operations are fast in most cases, [...]
  10. Single Instruction Single Data - an overview | ScienceDirect Topics.
  11. Kernighan, Brian W.; Ritchie, Dennis M. (1988). 2.2 Data Types and Sizes. The C programming language (вид. Second). Englewood Cliffs, N.J. с. 36. ISBN 0131103709.
  12. а б Fog, Agner (16 лютого 2010). [http: //www.agner.org/optimize/calling_conventions.pdf Умови виклику для різних компіляторів і операційних систем C++: Розділ 3, Представлення даних] (PDF). Процитовано 30 серпня 2010.
  13. Kernighan, Brian W; Ritchie, Dennis M (1978). The C Programming Language (вид. 1st). Englewood Cliffs, NJ: Prentice Hall. с. 41. ISBN 0-13-110163-3.
  14. Boolean type support library. devdocs.io. Процитовано 15 жовтня 2020.
  15. Тип даних Bool у C++. GeeksforGeeks. 5 червня 2017. Процитовано 15 жовтня 2020.
  16. {{cite web |last1=Biron |first1=Paul V. |last2=Malhotra |first2=Ashok |title=XML Schema Part 2 : Типи даних |url=https://www.w3.org/TR/xmlschema-2/#built-in-primitive-datatypes |website=www.w3.org |access-date=29 січня 2022 |edition=Second} }
  17. Phillips, Lee Anne (18 січня 2002). Declaring a NOTATION | Understanding XML Document Type Definitions. www.informit.com. Процитовано 29 січня 2022.
  18. /Glossary/Primitive Primitive – Глосарій веб-документів MDN: визначення пов’язаних із Інтернетом термінів. developer.mozilla.org. MDN.
  19. -types Типи у Visual Basic. Microsoft Docs (en-us) . 18 вересня 2021. Процитовано 18 травня 2022.
  20. /strings/#man-characters Strings · The Julia Language. docs.julialang.org. Процитовано 29 січня 2022.
  21. Mansoor, Umer (8 травня 2016). Тип char у Java не працює. CodeAhoy. Процитовано 10 лютого 2020.
  22. I/O and рядкові інструкції. Процитовано 29 січня 2022.