Typy danych C++
Wszystko zmienne użyj typu danych podczas deklaracji, aby ograniczyć typ danych, które mają być przechowywane. Dlatego możemy powiedzieć, że typy danych służą do informowania zmiennych o rodzaju danych, jakie mogą przechowywać. Ilekroć zmienna jest zdefiniowana w C++, kompilator przydziela jej część pamięci w oparciu o typ danych, z jakim jest ona zadeklarowana. Każdy typ danych wymaga innej ilości pamięci.
C++ obsługuje szeroką gamę typów danych, a programista może wybrać typ danych odpowiedni do potrzeb aplikacji. Typy danych określają rozmiar i typy wartości, które mają być przechowywane. Jednak reprezentacja pamięci i instrukcje maszynowe do manipulowania każdym typem danych różnią się w zależności od maszyny, chociaż instrukcje C++ są identyczne na wszystkich maszynach.
C++ obsługuje następujące typy danych:
- Podstawowy Lub Wbudowany Lub Podstawowy typ danych
- Pochodne typy danych
- Typy danych zdefiniowane przez użytkownika
Typy danych w C++ dzielą się głównie na 3 typy:
1. Pierwotne typy danych : Te typy danych są wbudowanymi lub predefiniowanymi typami danych i mogą być używane bezpośrednio przez użytkownika do deklarowania zmiennych. przykład: int, char, float, bool itp. Pierwotne typy danych dostępne w C++ to:
- Liczba całkowita
- Postać
- Wartość logiczna
- Zmiennoprzecinkowy
- Podwójny zmiennoprzecinkowy
- Bezwartościowe lub puste
- Szeroki charakter
2. Pochodne typy danych: Funkcjonować
3. Abstrakcyjne lub zdefiniowane przez użytkownika typy danych : Klasa
Pierwotne typy danych
- Klasa
- Liczba całkowita : Słowo kluczowe używane w przypadku typów danych całkowitych to wew . Liczby całkowite zazwyczaj wymagają 4 bajtów pamięci i mieszczą się w zakresie od -2147483648 do 2147483647.
- Postać : Znakowy typ danych używany do przechowywania znaków. Słowo kluczowe używane do określenia typu danych znakowych to zwęglać . Znaki zazwyczaj zajmują 1 bajt miejsca w pamięci i mieszczą się w zakresie od -128 do 127 lub od 0 do 255.
- Wartość logiczna : Typ danych Boolean jest używany do przechowywania wartości logicznych lub logicznych. Zmienna logiczna może przechowywać jedno i drugie PRAWDA Lub FAŁSZ . Słowo kluczowe używane dla typu danych Boolean to bool .
- Zmiennoprzecinkowy : Typ danych zmiennoprzecinkowy jest używany do przechowywania wartości zmiennoprzecinkowych lub wartości dziesiętnych o pojedynczej precyzji. Słowo kluczowe używane dla typu danych zmiennoprzecinkowych to platforma . Zmienne typu float zazwyczaj wymagają 4 bajtów pamięci.
- Podwójny zmiennoprzecinkowy : Typ danych Double Floating Point jest używany do przechowywania wartości zmiennoprzecinkowych lub wartości dziesiętnych o podwójnej precyzji. Słowo kluczowe używane dla typu danych double zmiennoprzecinkowego to podwójnie . Podwójne zmienne zazwyczaj wymagają 8 bajtów pamięci.
- próżnia : Void oznacza brak wartości. typ danych void reprezentuje bezwartościową jednostkę. W przypadku funkcji, które nie zwracają wartości, używany jest typ danych void.
- Klasa
- Szeroki charakter : Szeroki charakter typ danych jest również znakowym typem danych, ale ten typ danych ma rozmiar większy niż normalny 8-bitowy typ danych. Reprezentowane przez wchar_t . Zwykle ma długość 2 lub 4 bajtów.
- operator sizeof(): operator sizeof(). służy do znalezienia liczby bajtów zajmowanych przez zmienną/typ danych w pamięci komputera.
Przykład:
int m , x[50];
cout <
cout <
Rozmiar zmiennych może różnić się od pokazanego w powyższej tabeli, w zależności od kompilatora i komputera, którego używasz.
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;> }> |
Wyjście
Size of char : 1 Size of int : 4 Size of long : 8 Size of float : 4 Size of double : 8
Złożoność czasowa: O(1)
Złożoność przestrzeni: O(1)
Modyfikatory typów danych
Jak sama nazwa wskazuje, modyfikatory typów danych są używane z wbudowanymi typami danych w celu modyfikowania długości danych, które może przechowywać określony typ danych.
Modyfikatory typów danych dostępne w C++ to:
- Podpisano
- Niepodpisany
- Krótki
- Długi
Poniższa tabela podsumowuje zmodyfikowany rozmiar i zakres wbudowanych typów danych w połączeniu z modyfikatorami typów:
| Typ danych | Rozmiar (w bajtach) | Zakres |
|---|---|---|
| krótki wew | 2 | -32 768 do 32 767 |
| krótki int bez znaku | 2 | 0 do 65 535 |
| bez znaku int | 4 | 0 do 4 294 967 295 |
| wew | 4 | -2 147 483 648 do 2 147 483 647 |
| długi wew | 4 | -2 147 483 648 do 2 147 483 647 |
| długi int bez znaku | 4 | 0 do 4 294 967 295 |
| długi długi wew | 8 | -(2^63) do (2^63)-1 |
| bez znaku długi długi int | 8 | 0 do 18 446 744 073 709 551 615 |
| podpisany znak | 1 | -128 do 127 |
| znak bez znaku | 1 | 0 do 255 |
| platforma | 4 | -3,4×10^38 do 3,4×10^38 |
| podwójnie | 8 | -1,7×10^308 do 1,7×10^308 |
| długi podwójny | 12 | -1,1×10^4932 do 1,1×10^4932 |
| wchar_t | 2 lub 4 | 1 szeroki znak |
Notatka : Powyższe wartości mogą się różnić w zależności od kompilatora. W powyższym przykładzie rozważaliśmy 32-bitowy GCC.
Możemy wyświetlić rozmiar wszystkich typów danych, używając operatora sizeof() i przekazując słowo kluczowe typu danych jako argument tej funkcji, jak pokazano poniżej:
Aby poznać zakres typów danych, skorzystaj z poniższego wykresu
Uwaga: składnia plik nagłówkowy jest zdefiniowany w celu znalezienia zakresu podstawowych typów danych. Modyfikatory bez znaku mają minimalną wartość wynoszącą zero. Zatem dla minimalnej wartości bez znaku nie zdefiniowano żadnych stałych makro.
Stałe makro
| Nazwa | Wyraża |
|---|---|
| CHAR_MIN | Minimalna wartość obiektu typu char |
| CHAR_MAX | Maksymalna wartość obiektu typu char |
| SCHAR_MIN | Minimalna wartość obiektu typu Signed char |
| SCHAR_MAX | Maksymalna wartość dla obiektu typu Signed char |
| LOT_MAX | Maksymalna wartość obiektu typu Unsigned char |
| CHAR_BIT | Liczba bitów w obiekcie char |
| MB_LEN_MAX | Maksymalna liczba bajtów w znaku wielobajtowym |
| SHRT_MIN | Minimalna wartość obiektu typu short int |
| SHRT_MAX | Maksymalna wartość dla obiektu typu short int |
| USHRT_MAX | Maksymalna wartość dla obiektu typu Unsigned short int |
| INT_MIN | Minimalna wartość obiektu typu int |
| INT_MAX | Maksymalna wartość dla obiektu typu int |
| UINT_MAX | Maksymalna wartość dla obiektu typu Unsigned int |
| DŁUGIE_MIN | Minimalna wartość obiektu typu long int |
| DŁUGIE_MAX | Maksymalna wartość dla obiektu typu long int |
| HEAD_MAX | Maksymalna wartość dla obiektu typu Unsigned long int |
| WYSYŁKA_MIN | Minimalna wartość obiektu typu long long int |
| LLONG_MAX | Maksymalna wartość dla obiektu typu long long int |
| ULLONG_MAX | Maksymalna wartość dla obiektu typu Unsigned long long int |
Rzeczywista wartość zależy od konkretnego systemu i implementacji biblioteki, ale powinna odzwierciedlać ograniczenia tego typu na platformie docelowej. LLONG_MIN, LLONG_MAX i ULLONG_MAX są zdefiniowane dla bibliotek zgodnych ze standardem C z 1999 r. lub nowszym (który obejmuje tylko standard C++ od 2011 r.: C++ 11).
Program w C++ do znajdowania zakresu typów danych przy użyciu stałych makr
Przykład:
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;> }> |
Wyjście
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
Złożoność czasowa: O(1)
Złożoność przestrzeni: 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;> }> |
Wyjście
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!
Program ten deklaruje zmienne różnych typów danych, przypisuje im wartości, a następnie wypisuje ich wartości.
Typy danych całkowitych obejmują int, short, long i long long. Te typy danych reprezentują liczby całkowite o różnych rozmiarach.
Typy danych zmiennoprzecinkowych obejmują float, double i long double. Te typy danych reprezentują liczby rzeczywiste z różnym poziomem precyzji.
Znakowe typy danych obejmują char, wchar_t, char16_t i char32_t. Te typy danych reprezentują pojedyncze znaki o różnych rozmiarach.
Typ danych boolowskich to prosty typ danych, który może przyjmować tylko jedną z dwóch wartości: prawdę lub fałsz.
Typ danych string to sekwencja znaków. W tym programie używamy klasy string do zadeklarowania zmiennej łańcuchowej i przypisania jej wartości.
Zalety :
Typy danych umożliwiają kategoryzację i organizowanie danych w programie, ułatwiając ich zrozumienie i zarządzanie.
Każdy typ danych ma określony zakres wartości, jakie może przechowywać, co pozwala na bardziej precyzyjną kontrolę nad typem przechowywanych danych.
Typy danych pomagają zapobiegać błędom i błędom w programie, wymuszając rygorystyczne zasady dotyczące sposobu wykorzystania danych i manipulowania nimi.
C++ zapewnia szeroką gamę typów danych, umożliwiając programistom wybór najlepszego typu dla konkretnego zadania.
Niedogodności :
Użycie niewłaściwego typu danych może spowodować nieoczekiwane zachowanie i błędy w programie.
Niektóre typy danych, takie jak długie dane podwójne lub tablice znaków, mogą zajmować dużą ilość pamięci i mieć wpływ na wydajność, jeśli są nadmiernie używane.
Złożony system typów C++ może utrudniać początkującym naukę i efektywne używanie języka.
Użycie typów danych może zwiększyć złożoność i szczegółowość programu, czyniąc go trudniejszym do odczytania i zrozumienia.