In computer science, primitive data types are a set of basic data types from which all other data types are constructed. Specifically it often refers to the limited set of data representations in use by a particular processor, which all compiled programs must use. Most processors support a similar set of primitive data types, although the specific representations vary. More generally, "primitive data types" may refer to the standard data types built into a programming language. Data types which are not primitive are referred to as derived or composite.
Common primitive data typesEdit
- Integer types with a variety of ranges and precisions (
- Floating-point number with single or double precisions; (
- Boolean, logical values true and false. (
- A value referring to an executable memory address. (
returnAddress) This is not accessible from the Java programming language and is usually left out.
These primitive types are in general precisely those supported by computer hardware, except possibly for varying integer sizes or hardware that is missing floating point. Operations on such primitives are usually quite efficient. Primitive data types which are native to the processor have a one-to-one correspondence with objects in the computer's memory, and operations on these types are often the fastest possible in most cases. Integer addition, for example, can be performed as a single machine instruction, and some offer specific instructions to process sequences of characters with a single instruction. But the choice of primitive data type may affect performance, for example it is faster using SIMD operations and data types to operate on an array of floats.: 113
The set of basic C data types is similar to Java's. Minimally, there are four types,
double, but the qualifiers
unsigned mean that C contains numerous target-dependent integer and floating-point primitive types.
|Size (bytes)||Size (bits)||Names||Signed range (two's complement representation)||Unsigned range|
|1 byte||8 bits||Byte, octet, minimum size of
||−128 to +127||0 to 255|
|2 bytes||16 bits||x86 word, minimum size of
||−32,768 to +32,767||0 to 65,535|
|4 bytes||32 bits||x86 double word, minimum size of
||−2,147,483,648 to +2,147,483,647||0 to 4,294,967,295|
|8 bytes||64 bits||x86 quadruple word, minimum size of
||−9,223,372,036,854,775,808 to +9,223,372,036,854,775,807||0 to 18,446,744,073,709,551,615|
A floating-point number represents a limited-precision rational number that may have a fractional part. These numbers are stored internally in a format equivalent to scientific notation, typically in binary but sometimes in decimal. Because floating-point numbers have limited precision, only a subset of real or rational numbers are exactly representable; other numbers can be represented only approximately. Many languages have both a single precision (often called "float") and a double precision type (often called "double").
A boolean type, typically denoted "bool" or "boolean", is typically a logical type that can have either the value "true" or the value "false". Although only one bit is necessary to accommodate the value set "true" and "false", programming languages typically implement boolean types as one or more bytes.
Many languages (e.g. Java, Pascal and Ada) implement booleans adhering to the concept of boolean as a distinct logical type. Some languages, though, may implicitly convert booleans to numeric types at times to give extended semantics to booleans and boolean expressions or to achieve backwards compatibility with earlier versions of the language. For example, early versions of the C programming language that followed ANSI C and its former standards did not have a dedicated boolean type. Instead, numeric values of zero are interpreted as "false", and any other value is interpreted as "true". The newer C99 added a distinct boolean type that can be included with stdbool.h, and C++ supports
bool as a built-in type and "true" and "false" as reserved words.
string: a string, a sequence of Unicode code points
boolean: a boolean
decimal: a number represented with decimal notation
double: floating-point numbers
gMonth: Calendar dates and times
base64Binary: binary data encoded as hexadecimal or Base64
anyURI: a URI
QName: a qualified name
NOTATION: a QName declared as a notation in the schema. Notations are used to embed non-XML data types. This type cannot be used directly - only derived types that enumerate a limited set of QNames may be used.
In Visual Basic .NET, the primitive data types consist of 4 integral types, 2 floating-point types, a 16-byte decimal type, a boolean type, a date/time type, a Unicode character type, and a Unicode string type.
In general, data types that can be built into sophisticated programming languages include:
- Characters and strings (see below)
- Ranges (see below)
- Tuple in Standard ML, Python, Scala, Swift, Elixir
- List in Common Lisp, Python, Scheme, Haskell
- Fixed-point number with a variety of precisions and a programmer-selected scale.
- Complex number in C99, Fortran, Common Lisp, Python, D, Go. This is two floating-point numbers, a real part and an imaginary part.
- Rational number in Common Lisp
Integertype in Common Lisp, Erlang, Haskell
- Reference (also called a pointer or handle or descriptor),
Characters and stringsEdit
Some languages have "character" or "string" types that are too small to represent all Unicode characters or strings. These are more properly categorized as integer types. For example C includes a
char type, but it is defined to be the smallest addressable unit of memory, which several standards, such as POSIX require to be 8 bits. The recent version of these standards refer to
char as a numeric type.
char is also used for a 16-bit integer type in Java, but again this is not a Unicode character type. Some computer hardware has a few instructions which deal with "strings", referring to a sequence of bytes. For example, x86-64 can move, set, search, or compare a sequence of items, where an item could be 1, 2, 4, or 8 bytes long.
A range numeric data type has its maximum and minimum value embedded in the type. It is included in some languages such as Ada and Pascal. Attempting to store a number outside the range may lead to compiler/runtime errors, or to incorrect calculations (due to truncation) depending on the language being used. In practice the compiler chooses the most appropriate primitive integer or floating-point type automatically.
- Stone, R. G.; Cooke, D. J. (5 February 1987). Program Construction. Cambridge University Press. p. 18. ISBN 978-0-521-31883-9.
- Wikander, Jan; Svensson, Bertil (31 May 1998). Real-Time Systems in Mechatronic Applications. Springer Science & Business Media. p. 101. ISBN 978-0-7923-8159-4.
- Khurana, Rohit. Data and File Structure (For GTU), 2nd Edition. Vikas Publishing House. p. 2. ISBN 978-93-259-6005-3.
- Chun, Wesley (2001). Core Python Programming. Prentice Hall Professional. p. 77. ISBN 978-0-13-026036-9.
- Olsen, Geir; Allison, Damon; Speer, James (1 January 2008). Visual Basic .NET Class Design Handbook: Coding Effective Classes. Apress. p. 80. ISBN 978-1-4302-0780-1.
- Lindholm, Tim; Yellin, Frank; Bracha, Gilad; Buckley, Alex (13 February 2015). "Chapter 2. The Structure of the Java Virtual Machine". The Java® Virtual Machine Specification.
- Cowell, John (18 February 1997). Essential Java Fast: How to write object oriented software for the Internet. Springer Science & Business Media. p. 27. ISBN 978-3-540-76052-8.
- Rakshit, Sandip; Panigrahi, Goutam (December 1995). A Hand Book of Objected Oriented Programming With Java. S. Chand Publishing. p. 11. ISBN 978-81-219-3001-7.
- Fog, Agner. "Optimizing software in C++" (PDF). p. 29. Retrieved 28 January 2022.
Integer operations are fast in most cases, [...]
- "Single Instruction Single Data - an overview | ScienceDirect Topics".
- Kernighan, Brian W.; Ritchie, Dennis M. (1988). "2.2 Data Types and Sizes". The C programming language (Second ed.). Englewood Cliffs, N.J. p. 36. ISBN 0131103709.
- Fog, Agner (2010-02-16). "Calling conventions for different C++ compilers and operating systems: Chapter 3, Data Representation" (PDF). Retrieved 2010-08-30.
- Kernighan, Brian W; Ritchie, Dennis M (1978). The C Programming Language (1st ed.). Englewood Cliffs, NJ: Prentice Hall. p. 41. ISBN 0-13-110163-3.
- "Boolean type support library". devdocs.io. Retrieved October 15, 2020.
- "Bool data type in C++". GeeksforGeeks. 5 June 2017. Retrieved October 15, 2020.
- Biron, Paul V.; Malhotra, Ashok. "XML Schema Part 2: Datatypes". www.w3.org (Second ed.). Retrieved 29 January 2022.
- Phillips, Lee Anne (18 January 2002). "Declaring a NOTATION | Understanding XML Document Type Definitions". www.informit.com. Retrieved 29 January 2022.
- "Primitive - MDN Web Docs Glossary: Definitions of Web-related terms". developer.mozilla.org. MDN.
- "Types in Visual Basic". Microsoft Docs. 18 September 2021. Retrieved 18 May 2022.
- "Strings · The Julia Language". docs.julialang.org. Retrieved 29 January 2022.
- Mansoor, Umer (8 May 2016). "The char Type in Java is Broken". CodeAhoy. Retrieved 10 February 2020.
- "I/O and string instructions". Retrieved 29 January 2022.
- Media related to Primitive types at Wikimedia Commons