In der Informatik sind primitive Datentypen Mengen grundlegender Datentypen, aus denen alle anderen Datentypen abgeleitet werden. [ 1 ] Insbesondere bezieht sich der Begriff oft auf die begrenzte Menge an Datendarstellungen, die von einem bestimmten Prozessor verwendet werden und die alle kompilierten Programme nutzen müssen. Die meisten Prozessoren unterstützen eine ähnliche Menge primitiver Datentypen, wobei die spezifischen Darstellungen variieren. [ 2 ] Allgemeiner können primitive Datentypen die in eine Programmiersprache integrierten Standarddatentypen ( eingebaute Typen ) bezeichnen. [ 3 ] [ 4 ] Datentypen, die nicht primitiv sind, werden als abgeleitete oder zusammengesetzte Datentypen bezeichnet . [ 3 ]
Primitive Datentypen sind fast immer Werttypen , aber auch zusammengesetzte Datentypen können Werttypen sein. [ 5 ]
Häufige primitive Datentypen
Die gebräuchlichsten primitiven Datentypen sind diejenigen, die von der Computerhardware verwendet und unterstützt werden, wie z. B. ganze Zahlen verschiedener Größen, Gleitkommazahlen und boolesche Werte. Operationen mit solchen Datentypen sind in der Regel sehr effizient. Prozessoreigene primitive Datentypen haben eine Eins-zu-eins-Entsprechung zu Objekten im Arbeitsspeicher, und Operationen mit diesen Datentypen sind in den meisten Fällen die schnellstmöglichen. [ 6 ] Die Addition von ganzen Zahlen kann beispielsweise mit einem einzigen Maschinenbefehl ausgeführt werden, und manche Prozessoren bieten spezielle Befehle zur Verarbeitung von Zeichenketten mit einem einzigen Befehl . [ 7 ] Die Wahl des primitiven Datentyps kann jedoch die Leistung beeinflussen; so ist es beispielsweise schneller, mit SIMD- Operationen und Datentypen auf einem Array von Gleitkommazahlen zu operieren. [ 6 ] : 113
Ganze Zahlen
Ein Integer- Datentyp repräsentiert einen Bereich mathematischer Ganzzahlen. Ganze Zahlen können entweder vorzeichenbehaftet (negative Werte sind zulässig) oder vorzeichenlos ( nur nicht-negative ganze Zahlen ) sein. Gängige Bereiche sind:
| Größe ( Bytes ) | Größe ( Bit ) | Namen | Vorzeichenbereich ( Zweierkomplementdarstellung ) | Unsignierter Bereich |
|---|---|---|---|---|
| 1 Byte | 8 Bit | Byte , Oktett , Mindestgröße charin C99 (siehe limits.h CHAR_BIT) | −128 bis +127 | 0 bis 255 |
| 2 Bytes | 16 Bit | x86 -Wort , Mindestgröße von shortund intin C | −32.768 bis +32.767 | 0 bis 65.535 |
| 4 Bytes | 32 Bit | x86-Doppelwort, minimale Größe longin C, tatsächliche Größe intfür die meisten modernen C-Compiler, [ 8 ] Zeiger für IA-32 -kompatible Prozessoren | −2.147.483.648 bis +2.147.483.647 | 0 bis 4.294.967.295 |
| 8 Bytes | 64 Bit | x86-Vierfachwort, minimale Größe long longin C, tatsächliche Größe longfür die meisten modernen C-Compiler, [ 8 ] Zeiger für x86-64- kompatible Prozessoren | −9.223.372.036.854.775.808 bis +9.223.372.036.854.775.807 | 0 bis 18.446.744.073.709.551.615 |
Gleitkommazahlen
Eine Gleitkommazahl repräsentiert eine rationale Zahl mit begrenzter Genauigkeit , die einen Nachkommaanteil enthalten kann. Diese Zahlen werden intern in einem Format gespeichert, das der wissenschaftlichen Notation entspricht , typischerweise binär , manchmal aber auch dezimal . Da Gleitkommazahlen eine begrenzte Genauigkeit besitzen, lässt sich nur eine Teilmenge der reellen oder rationalen Zahlen exakt darstellen; andere Zahlen können nur näherungsweise dargestellt werden. Viele Programmiersprachen kennen sowohl einen Datentyp mit einfacher Genauigkeit (oft als `float` bezeichnet ) als auch einen mit doppelter Genauigkeit (oft als `double` bezeichnet ).
Boolesche Werte
Ein boolescher Datentyp , üblicherweise mit bool oder boolean bezeichnet , ist ein logischer Datentyp , der entweder den Wert true oder false annehmen kann . Obwohl nur ein Bit benötigt wird, um die Werte true und false zu speichern , implementieren Programmiersprachen boolesche Datentypen üblicherweise mit einem oder mehreren Bytes.
Viele Programmiersprachen (z. B. Java , Pascal und Ada ) implementieren Boolesche Werte gemäß dem Konzept von Boolean als eigenständigem logischen Datentyp. Einige Sprachen konvertieren Booleans jedoch implizit in numerische Datentypen , um die Semantik von Booleans und Booleschen Ausdrücken zu erweitern oder um Abwärtskompatibilität mit früheren Sprachversionen zu gewährleisten. Beispielsweise besaßen frühe Versionen der Programmiersprache C, die dem ANSI-C-Standard und seinen Vorgängerstandards folgten, keinen dedizierten Boolean-Datentyp. Stattdessen wurden numerische Werte von Null als „false“ und alle anderen Werte als „true“ interpretiert . [ 9 ] Mit dem neueren C99 wurde ein eigener Boolean-Datentyp eingeführt (später in C23_Bool verschoben, boolzusammen mit den Schlüsselwörtern ` true` trueund `false` ). [ 10 ] C ++ unterstützt Boolean als eingebauten Datentyp und `true` und `false` als reservierte Wörter. [ 11 ]falsebool
Spezielle Sprachen
C- und C++-Basistypen
In C und C++ gibt es mindestens vier Datentypen: `int` char, int` float` float, `float` und `float` double. Die Modifikatoren short`int`, long`float` signed, `float` und unsigned`float` bedeuten jedoch, dass C zahlreiche zielplattformabhängige primitive Integer- und Gleitkomma-Datentypen enthält. [ 12 ] C99 erlaubte die longzweimalige Verwendung des Modifikators `int` in Kombination mit `float` int(z. B. `int` long long int). [ 13 ] Ebenso können `int` signedund `float` als Modifikatoren für Integer-Datentypen verwendet werden. C23 führte den Datentyp `int` als Kerndatentyp ein, während er in C++ schon immer ein Kerndatentyp war. C++ kennt außerdem einen Datentyp `int` (ähnlich wie in Java). unsignedboolstd::byte
C und C++ enthalten außerdem size_t` intptr_tint` und andere Integer-Typen, beispielsweise zum Indizieren von Arrays und Sammlungen. Dabei handelt es sich nicht um eigenständige Datentypen, sondern oft um Aliase, die vom System definiert sind. Sie ähneln möglicherweise den Datentypen in usizeRust isize.
Java
Die grundlegenden Datentypen von Java ähneln denen von C. Der Satz primitiver Datentypen der Java Virtual Machine besteht aus: [ 14 ]
byte,short,int,long,char( Ganzzahltypen mit verschiedenen Wertebereichen)floatund Gleitkommazahlen mit einfacher unddoubledoppelter Genauigkeitboolean, ein boolescher Datentyp mit logischen WertentrueundfalsereturnAddress, ein Wert, der auf eine ausführbare Speicheradresse verweist. Dieser Wert ist von der Java-Programmiersprache aus nicht zugänglich und wird daher üblicherweise weggelassen. [ 15 ] [ 16 ]
XML-Schema
Die XML Schema Definition Sprache bietet einen Satz von 19 primitiven Datentypen: [ 17 ]
string: eine Zeichenkette , eine Folge von Unicode-Codepunktenboolean: ein boolescher Wertdecimal: eine Zahl in Dezimaldarstellungfloatunddouble: Gleitkommazahlenduration,dateTime,time,date,gYearMonth,gYear,gMonthDay,gDay, undgMonth: Kalenderdaten und -zeitenhexBinaryundbase64Binary: Binärdaten, die als Hexadezimal- oder Base64-Daten kodiert sindanyURI: eine URIQName: ein qualifizierter NameNOTATIONEin QName, der als Notation im Schema deklariert ist. Notationen dienen zum Einbetten von Nicht-XML-Datentypen. [ 18 ] Dieser Typ kann nicht direkt verwendet werden – es können nur abgeleitete Typen verwendet werden, die eine begrenzte Menge von QNames auflisten.
JavaScript
In JavaScript gibt es sieben primitive Datentypen: string, number, bigint, boolean, symbol, undefined und null. [ 19 ] Ihre Werte gelten als unveränderlich . Sie sind keine Objekte und besitzen keine Methoden oder Eigenschaften ; allerdings verfügen alle primitiven Datentypen außer undefined und null über Objekt-Wrapper . [ 20 ]
Visual Basic .NET
In Visual Basic .NET bestehen die primitiven Datentypen aus 4 Ganzzahltypen, 2 Gleitkommatypen, einem 16-Byte-Dezimaltyp, einem Boolean-Typ, einem Datums-/Zeittyp, einem Unicode-Zeichentyp und einem Unicode-Zeichenkettentyp. [ 21 ]
Rost
Rust kennt primitive vorzeichenlose und vorzeichenbehaftete Ganzzahlen fester Breite im Format `unsigned` ubzw. ` signed`, igefolgt von einer beliebigen Bitbreite, die eine Zweierpotenz zwischen 0 8und 1 ist . Dies ergibt 128die Typen u8` u16unsigned`, u32` u64... u128und ` signed` . [ 22 ] Außerdem gibt es die Typen `unsigned` und ` signed`, die vorzeichenlose i8bzw. vorzeichenbehaftete Ganzzahlen mit der gleichen Bitbreite wie eine Referenz darstellen. Der Typ `signed` wird für Indizes in Arrays und indizierbare Sammlungstypen verwendet. [ 22 ]i16i32i64i128usizeisizeusize
Rust hat außerdem:
boolfür den booleschen Typ. [ 22 ]f32undf64für 32- und 64-Bit -Gleitkommazahlen . [ 22 ]charfür ein Unicode-Zeichen . Intern handelt es sich um vorzeichenlose 32-Bit-Ganzzahlen, deren Werte demcharCodepunkt des Zeichens entsprechen, wobei jedoch nur Werte gültig sind, die einem gültigen Unicode-Skalarwert entsprechen. [ 22 ]
Eingebaute Typen
Eingebaute Datentypen unterscheiden sich von anderen dadurch, dass sie im Compiler oder zur Laufzeit so stark unterstützt werden, dass sie nicht einfach in einer Headerdatei oder einem Standardbibliotheksmodul definiert werden können. [ 23 ] Neben Ganzzahlen, Gleitkommazahlen und Booleschen Werten gehören zu den eingebauten Datentypen unter anderem:
- Der Void-Typ und der Nullzeiger-Typ
nullptr_tin C++11 und C23 - Zeichen und Zeichenketten (siehe unten )
- Tupel in Standard ML , Python , Scala , Swift , Elixir
- Listen in Common Lisp , Python , Scheme , Haskell
- Festkommazahl mit verschiedenen Genauigkeitsstufen und einem vom Programmierer gewählten Maßstab .
- Komplexe Zahl in C99 , Fortran , Common Lisp , Python , D , Go . Dies sind zwei Gleitkommazahlen, ein Realteil und ein Imaginärteil.
- Aufzählung von Typen mit Namen für zulässige Werte; kann die Lesbarkeit und die Typüberprüfung verbessern.
- Rationale Zahl in Common Lisp
IntegerDatentypen mit beliebiger Genauigkeit in Common Lisp , Erlang und Haskell- Assoziative Arrays , Datensätze oder Mengen in Perl , PHP , Python , Ruby , JavaScript , Lua , D und Go
- Referenz (auch Zeiger , Handle oder Deskriptor genannt ),
- Symbole in Lisp
- Funktionen erster Klasse sind in allen funktionalen Sprachen wie JavaScript , Lua , D , Go und in neueren Standards wie C++ , Java , C# und Perl üblich.
Zeichen und Zeichenketten
Ein Zeichentyp ist ein Datentyp, der alle Unicode-Zeichen darstellen kann und daher mindestens 21 Bit breit sein muss. Einige Sprachen wie Julia bieten einen echten 32-Bit-Unicode-Zeichentyp als primitiven Datentyp an. [ 24 ] Andere Sprachen wie JavaScript , Python , Ruby und viele BASIC- Dialekte verfügen nicht über einen primitiven Zeichentyp, sondern verwenden stattdessen Zeichenketten als primitiven Datentyp, typischerweise in UTF-8- Kodierung. Zeichenketten der Länge eins werden üblicherweise verwendet, um einzelne Zeichen darzustellen.
Manche Programmiersprachen verfügen über Zeichentypen , die zu klein sind, um alle Unicode-Zeichen darzustellen. Diese werden korrekterweise als Integer-Typen kategorisiert, die jedoch irreführende Bezeichnungen tragen. Beispielsweise enthält C einen charTyp, der als kleinste adressierbare Speichereinheit definiert ist, welche laut mehreren Standards (wie z. B. POSIX ) 8 Bit umfassen muss . Neuere Versionen dieser Standards bezeichnen chardiesen Typ als numerischen Typ. Auch in Javachar wird dieser Typ für einen 16-Bit-Integer-Typ verwendet, ist aber ebenfalls kein Unicode-Zeichentyp. [ 25 ]
Der Begriff „String“ bezeichnet nicht immer eine Folge von Unicode-Zeichen, sondern kann auch eine Folge von Bytes sein. Beispielsweise verfügt x86-64 über String -Befehle zum Verschieben, Setzen, Suchen oder Vergleichen einer Sequenz von Elementen, wobei ein Element 1, 2, 4 oder 8 Byte lang sein kann. [ 26 ]
Siehe auch
- Sprachprimitive – Mikrocode in der Programmiersprache
- Liste der Datenstrukturen § Datentypen
- Objekttyp – Konzept einer Programmiersprache
- Primitive Wrapper-Klasse
- Variable (höhere Programmiersprache) – Benannter Container für einen bestimmten Datentyp
Referenzen
- ^ Stone, RG; Cooke, DJ (5. Februar 1987). Program Construction . Cambridge University Press. S. 18. ISBN 978-0-521-31883-9Die
- ^ Wikander, Jan; Svensson, Bertil (31. Mai 1998). Echtzeitsysteme in mechatronischen Anwendungen . Springer Science & Business Media. S. 101. ISBN 978-0-7923-8159-4Die
- ^ a b Khurana, Rohit. Daten- und Dateistruktur (für GTU), 2. Auflage . Vikas Publishing House. S. 2. ISBN 978-93-259-6005-3Die
- ^ Chun, Wesley (2001). Core Python Programming . Prentice Hall Professional. S. 77. ISBN 978-0-13-026036-9Die
- ^ Olsen, Geir; Allison, Damon; Speer, James (1. Januar 2008). Visual Basic .NET Class Design Handbook: Coding Effective Classes . Apress. S. 80. ISBN 978-1-4302-0780-1Die
- ^ a b Fog, Agner. „Optimizing software in C++“ (PDF) . S. 29. Abgerufen am 28. Januar 2022.
Ganzzahloperationen sind in den meisten Fällen schnell, [...
] - ^ Hennessy, John L.; Patterson, David A. (August 2011). Rechnerarchitektur, Fünfte Auflage: Ein quantitativer Ansatz (5. Aufl.). San Francisco, CA, USA: Morgan Kaufmann Publishers Inc. ISBN 978-0-12-383872-8Die
- ^ a b Fog, Agner (16.02.2010). „Aufrufkonventionen für verschiedene C++-Compiler und Betriebssysteme: Kapitel 3, Datendarstellung“ (PDF) . Abgerufen am 30.08.2010 .
- ^ Kernighan, Brian W .; Ritchie, Dennis M. ( 1978). Die Programmiersprache C (1. Aufl.). Englewood Cliffs, NJ : Prentice Hall . S. 41. ISBN 0-13-110163-3Die
- ^ „Bibliothek zur Unterstützung boolescher Typen“ . devdocs.io . Abgerufen am 15. Oktober 2020 .
- ^ „Bool-Datentyp in C++“ . GeeksforGeeks . 5. Juni 2017. Abgerufen am 15. Oktober 2020 .
- ^ Kernighan, Brian W.; Ritchie, Dennis M. (1988). „2.2 Datentypen und -größen“. Die Programmiersprache C (2. Aufl.). Englewood Cliffs, NJ, S. 36. ISBN 0131103709Die
{{cite book}}: CS1 maint: location missing publisher (link) - ^ ISO/IEC 9899:1999 Spezifikation, TC3 (PDF) . S. 255, § 6.2.5 Typen .
- ^ Lindholm, Tim; Yellin, Frank; Bracha, Gilad; Buckley, Alex (13. Februar 2015). „Kapitel 2. Die Struktur der Java Virtual Machine“. Die Java® Virtual Machine Spezifikation .
- ^ Cowell, John (18. Februar 1997). Essential Java Fast: How to write object oriented software for the Internet . Springer Science & Business Media. S. 27. ISBN 978-3-540-76052-8Die
- ^ Rakshit, Sandip; Panigrahi, Goutam (Dezember 1995). Ein Handbuch der objektorientierten Programmierung mit Java . S. Chand Publishing. S. 11. ISBN 978-81-219-3001-7Die
- ^ Biron, Paul V.; Malhotra, Ashok. „XML Schema Part 2: Datatypes“ . www.w3.org (Zweite Auflage) . Abgerufen am 29. Januar 2022 .
- ^ Phillips, Lee Anne (18. Januar 2002). „Deklarieren einer NOTATION | XML-Dokumenttypdefinitionen verstehen“ . www.informit.com . Abgerufen am 29. Januar 2022 .
- ^ „Primitive - MDN Web Docs Glossary: Definitions of Web-related terms“ . MDN. 8. Juni 2023.
- ^ „JavaScript-Datentypen und Datenstrukturen“ . MDN. 9. Juli 2024.
- ^ „Typen in Visual Basic“ . Microsoft Docs . 18. September 2021. Abgerufen am 18. Mai 2022 .
- ^ a b c d e „Datentypen – Die Programmiersprache Rust“ . doc.rust-lang.org . Abgerufen am 17.10.2023 .
- ^ „Eingebaute Typen (C++)“ . learn.microsoft.com . 17. August 2021.
- ^ „Strings · Die Julia-Sprache“ . docs.julialang.org . Abgerufen am 29. Januar 2022 .
- ^ Mansoor, Umer (8. Mai 2016). „Der char-Datentyp in Java ist fehlerhaft“ . CodeAhoy . Abgerufen am 10. Februar 2020 .
- ^ „E/A- und String-Anweisungen“ . Abgerufen am 29. Januar 2022 .
Externe Links
Medien zum Thema primitive Datentypen auf Wikimedia Commons- Unterschiede zwischen primitiven Datentypen und Objekten