Allt variabler använd datatyp under deklaration för att begränsa vilken typ av data som ska lagras. Därför kan vi säga att datatyper används för att berätta för variablerna vilken typ av data de kan lagra. Närhelst en variabel definieras i C++, allokerar kompilatorn lite minne för den variabeln baserat på den datatyp som den deklareras med. Varje datatyp kräver olika mängd minne.
C++ stöder en mängd olika datatyper och programmeraren kan välja den datatyp som passar applikationens behov. Datatyper anger storleken och typerna av värden som ska lagras. Lagringsrepresentation och maskininstruktioner för att manipulera varje datatyp skiljer sig dock från maskin till maskin, även om C++-instruktioner är identiska på alla maskiner.
C++ stöder följande datatyper:
- Primär eller Inbyggt eller Grundläggande datatyp
- Härledda datatyper
- Användardefinierade datatyper
Datatyper i C++ är huvudsakligen uppdelade i 3 typer:
1. Primitiva datatyper : Dessa datatyper är inbyggda eller fördefinierade datatyper och kan användas direkt av användaren för att deklarera variabler. exempel: int, char, float, bool, etc. Primitiva datatyper tillgängliga i C++ är:
- Heltal
- Karaktär
- Boolean
- Flytpunkt
- Dubbel flytande punkt
- Värdelös eller tom
- Bred karaktär
2. Härledda datatyper: Fungera
3. Abstrakta eller användardefinierade datatyper : Klass
Primitiva datatyper
- Klass
- Heltal : Nyckelordet som används för heltalsdatatyper är int . Heltal kräver vanligtvis 4 byte minnesutrymme och sträcker sig från -2147483648 till 2147483647.
- Karaktär : Teckendatatyp används för att lagra tecken. Nyckelordet som används för teckendatatypen är röding . Tecken kräver vanligtvis 1 byte minnesutrymme och sträcker sig från -128 till 127 eller 0 till 255.
- Boolean : Boolesk datatyp används för att lagra booleska eller logiska värden. En boolesk variabel kan lagra antingen Sann eller falsk . Nyckelordet som används för den booleska datatypen är bool .
- Flytpunkt : Flyttalsdatatyp används för att lagra flyttalsvärden eller decimalvärden med en precision. Nyckelordet som används för flyttalsdatatypen är flyta . Flytvariabler kräver vanligtvis 4 byte minnesutrymme.
- Dubbel flytande punkt : Dubbel flyttalsdatatyp används för att lagra flyttalsvärden eller decimalvärden med dubbel precision. Nyckelordet som används för datatypen med dubbel flyttal är dubbel . Dubbla variabler kräver vanligtvis 8 byte minnesutrymme.
- tomhet : Tom betyder utan något värde. void datatyp representerar en värdelös enhet. En void datatyp används för de funktioner som inte returnerar ett värde.
- Klass
- Bred karaktär : Bred karaktär datatypen är också en teckendatatyp men denna datatyp har en storlek större än den normala 8-bitars datatypen. Representerad av wchar_t . Den är vanligtvis 2 eller 4 byte lång.
- sizeof() operator: sizeof() operator används för att hitta antalet byte som upptas av en variabel/datatyp i datorns minne.
Exempel:
int m, x[50];
cout<
cout<
Storleken på variabler kan skilja sig från de som visas i tabellen ovan, beroende på kompilatorn och datorn du använder.
C++
// C++ Program to Demonstrate the correct size> // of various data types on your computer.> #include> using> namespace> std;> int> main()> {> > cout <<> 'Size of char : '> <<> sizeof> (> char> ) << endl;> > cout <<> 'Size of int : '> <<> sizeof> (> int> ) << endl;> > cout <<> 'Size of long : '> <<> sizeof> (> long> ) << endl;> > cout <<> 'Size of float : '> <<> sizeof> (> float> ) << endl;> > cout <<> 'Size of double : '> <<> sizeof> (> double> ) << endl;> > return> 0;> }> |
>
>Produktion
Size of char : 1 Size of int : 4 Size of long : 8 Size of float : 4 Size of double : 8>
Tidskomplexitet: O(1)
Utrymmes komplexitet: O(1)
Datatypmodifierare
Som namnet antyder används datatypmodifierare med inbyggda datatyper för att ändra längden på data som en viss datatyp kan hålla.
Datatypsmodifierare tillgängliga i C++ är:
- Signerad
- Osignerad
- Kort
- Lång
Tabellen nedan sammanfattar den modifierade storleken och intervallet av inbyggda datatyper när de kombineras med typmodifierarna:
Data typ | Storlek (i byte) | Räckvidd |
---|---|---|
kort int | 2 | -32 768 till 32 767 |
osignerad kort int | 2 | 0 till 65 535 |
osignerad int | 4 | O till 4,294,967,295 |
int | 4 | -2 147 483 648 till 2 147 483 647 cpp är lika med |
lång int | 4 | -2 147 483 648 till 2 147 483 647 |
osignerad lång int | 4 | O till 4,294,967,295 |
lång lång int | 8 | -(2^63) till (2^63)-1 |
osignerad lång lång int | 8 | 0 till 18 446 744 073 709 551 615 |
signerad röding | 1 | -128 till 127 |
osignerad röding | 1 | 0 till 255 |
flyta | 4 | -3,4×10^38 till 3,4×10^38 |
dubbel | 8 | -1,7×10^308 till 1,7×10^308 |
lång dubbel | 12 | -1,1×10^4932 till 1,1×10^4932 |
wchar_t | 2 eller 4 | 1 bred karaktär |
Notera : Ovanstående värden kan variera från kompilator till kompilator. I exemplet ovan har vi övervägt GCC 32 bitar.
Vi kan visa storleken på alla datatyper genom att använda operatorn sizeof() och skicka nyckelordet för datatypen, som ett argument för denna funktion som visas nedan:
För att få information om intervallet för datatyper, se följande diagram
Obs: syntax header-filen är definierad för att hitta intervallet av grundläggande datatyper. Osignerade modifierare har ett lägsta värde är noll. Så inga makrokonstanter definieras för det osignerade minimivärdet.
Makrokonstanter
namn | Uttrycker |
---|---|
CHAR_MIN | Minsta värde för ett objekt av typen char |
CHAR_MAX | Maximalt värde för ett objekt av typen char |
SCHAR_MIN | Minsta värde för ett objekt av typen Signed char |
SCHAR_MAX | Maximalt värde för ett objekt av typen Signed char |
FLIGHT_MAX | Maximalt värde för ett objekt av typen Unsigned char |
CHAR_BIT | Antal bitar i ett char-objekt |
MB_LEN_MAX | Maximalt antal byte i ett flerbytetecken |
SHRT_MIN | Minimivärdet för ett objekt av typen short int |
SHRT_MAX | Maximalt värde för ett objekt av typen short int |
USHRT_MAX | Maximalt värde för ett objekt av typen Unsigned short int |
INT_MIN | Minimivärdet för ett objekt av typen int |
INT_MAX | Maximalt värde för ett objekt av typen int |
UINT_MAX | Maximalt värde för ett objekt av typen Unsigned int |
LONG_MIN | Minsta värde för ett objekt av typen long int |
LONG_MAX | Maximalt värde för ett objekt av typen long int |
HEAD_MAX | Maximalt värde för ett objekt av typen Unsigned long int |
SHIP_MIN | Minimivärdet för ett objekt av typen long long int |
LLONG_MAX | Maximalt värde för ett objekt av typen long long int |
ULLONG_MAX | Maximalt värde för ett objekt av typen Unsigned long long int |
Det faktiska värdet beror på det specifika systemet och biblioteksimplementeringen men ska återspegla gränserna för dessa typer i målplattformen. LLONG_MIN, LLONG_MAX och ULLONG_MAX definieras för bibliotek som följer C-standarden från 1999 eller senare (som endast inkluderar C++-standarden sedan 2011: C++11).
C++-program för att hitta intervallet för datatyper med hjälp av makrokonstanter
Exempel:
C++
// C++ program to Demonstrate the sizes of data types> #include> #include> using> namespace> std;> int> main()> {> > cout <<> 'Size of char : '> <<> sizeof> (> char> ) <<> ' byte'> > << endl;> > cout <<> 'char minimum value: '> << CHAR_MIN << endl;> > cout <<> 'char maximum value: '> << CHAR_MAX << endl;> > cout <<> 'Size of int : '> <<> sizeof> (> int> ) <<> ' bytes'> > << endl;> > cout <<> 'Size of short int : '> <<> sizeof> (> short> int> )> > <<> ' bytes'> << endl;> > cout <<> 'Size of long int : '> <<> sizeof> (> long> int> )> > <<> ' bytes'> << endl;> > cout <<> 'Size of signed long int : '> > <<> sizeof> (> signed> long> int> ) <<> ' bytes'> << endl;> > cout <<> 'Size of unsigned long int : '> > <<> sizeof> (unsigned> long> int> ) <<> ' bytes'> << endl;> > cout <<> 'Size of float : '> <<> sizeof> (> float> ) <<> ' bytes'> > << endl;> > cout <<> 'Size of double : '> <<> sizeof> (> double> )> > <<> ' bytes'> << endl;> > cout <<> 'Size of wchar_t : '> <<> sizeof> (> wchar_t> )> > <<> ' bytes'> << endl;> > return> 0;> }> |
>
>Produktion
Size of char : 1 byte char minimum value: -128 char maximum value: 127 Size of int : 4 bytes Size of short int : 2 bytes Size of long int : 8 bytes Size of signed long int : 8 bytes Size of unsigned long int : 8 bytes Size of float : 4 bytes Size of double : 8 bytes Size of wchar_t : 4 bytes>
Tidskomplexitet: O(1)
Utrymmes komplexitet: O(1)
C++
#include> #include> using> namespace> std;> int> main() {> > // Integer data types> > int> a = 10;> > short> b = 20;> > long> c = 30;> > long> long> d = 40;> > cout <<> 'Integer data types: '> << endl;> > cout <<> 'int: '> << a << endl;> > cout <<> 'short: '> << b << endl;> > cout <<> 'long: '> << c << endl;> > cout <<> 'long long: '> << d << endl;> > > // Floating-point data types> > float> e = 3.14f;> > double> f = 3.141592;> > long> double> g = 3.14159265358979L;> > cout <<> 'Floating-point data types: '> << endl;> > cout <<> 'float: '> << e << endl;> > cout <<> 'double: '> << f << endl;> > cout <<> 'long double: '> << g << endl;> > > // Character data types> > char> h => 'a'> ;> > wchar_t> i = L> 'b'> ;> > char16_t j = u> 'c'> ;> > char32_t k = U> 'd'> ;> > cout <<> 'Character data types: '> << endl;> > cout <<> 'char: '> << h << endl;> > wcout <<> 'wchar_t: '> << i << endl;> > cout <<> 'char16_t: '> << j << endl;> > cout <<> 'char32_t: '> << k << endl;> > > // Boolean data type> > bool> l => true> ;> > bool> m => false> ;> > cout <<> 'Boolean data type: '> << endl;> > cout <<> 'true: '> << l << endl;> > cout <<> 'false: '> << m << endl;> > > // String data type> > string n => 'Hello, world!'> ;> > cout <<> 'String data type: '> << endl;> > cout << n << endl;> > > return> 0;> }> |
>
>Produktion
Integer data types: int: 10 short: 20 long: 30 long long: 40 Floating-point data types: float: 3.14 double: 3.14159 long double: 3.14159 Character data types: char: a wchar_t: b char16_t: 99 char32_t: 100 Boolean data type: true: 1 false: 0 String data type: Hello, world!>
Detta program deklarerar variabler av olika datatyper, tilldelar dem värden och skriver sedan ut deras värden.
Heltalsdatatyperna inkluderar int, kort, lång och lång lång. Dessa datatyper representerar heltal av varierande storlek.
Flyttalsdatatyperna inkluderar flytande, dubbel och lång dubbel. Dessa datatyper representerar reella tal med varierande precisionsnivåer.
Teckendatatyperna inkluderar char, wchar_t, char16_t och char32_t. Dessa datatyper representerar individuella tecken av varierande storlek.
Den booleska datatypen är en enkel datatyp som bara kan ha ett av två värden: sant eller falskt.
Strängdatatypen är en sekvens av tecken. I det här programmet använder vi strängklassen för att deklarera en strängvariabel och tilldela den ett värde.
Fördelar :
Datatyper ger ett sätt att kategorisera och organisera data i ett program, vilket gör det lättare att förstå och hantera.
Varje datatyp har ett specifikt intervall av värden den kan hålla, vilket möjliggör mer exakt kontroll över vilken typ av data som lagras.
Datatyper hjälper till att förhindra fel och buggar i ett program genom att upprätthålla strikta regler om hur data kan användas och manipuleras.
C++ tillhandahåller ett brett utbud av datatyper, vilket gör att utvecklare kan välja den bästa typen för en specifik uppgift.
Nackdelar :
Att använda fel datatyp kan resultera i oväntat beteende och fel i ett program.
Vissa datatyper, som långa dubblar eller char arrays, kan ta upp en stor mängd minne och påverka prestanda om de används överdrivet.
C++:s komplexa typsystem kan göra det svårt för nybörjare att lära sig och använda språket effektivt.
Användningen av datatyper kan lägga till ytterligare komplexitet och utförlighet till ett program, vilket gör det svårare att läsa och förstå.