fbpx ...

Wbudowane typy danych w C++ (nazywane też podstawowymi) to typy danych, które są wbudowane w kompilator. Oznacza to, że nie musisz ich tworzyć ani definiować, ponieważ na starcie są dostępne w języku C++. Oczywiście pisząc własne klasy, struktury, czy nadając nazwy już istniejącym typom, możesz tworzyć wiele różnych typów danych, ale to już nie będą typy wbudowane. W tym artykule skupimy się rodzajach wbudowanych typów danych  oraz na tym, dlaczego warto je znać.

Kartkówka z informatyki

Zanim przejdziemy do rodzajów wbudowanych typów danych, przypomnijmy sobie, jak reprezentowane są dane w pamięci komputera:

  • Bit – to najmniejsza jednostka informacji, która może przechowywać wartość 0 lub 1
  • Bajt – to najmniejsza możliwa do zaalokowania jednostka pamięci, która składa się z 8 bitów*

2 do potęgi 8 daje nam 256, zatem na jednym bajcie możemy zapisać 256 liczb (od 0 do 255).

Schowaj sobie tę matematykę z tyłu głowy, zaraz Ci się przyda, bo przechodzimy do rodzajów wbudowanych typów danych.

void, czyli typ pusty

Właściwie używamy go wyłącznie do oznaczania, że funkcja nic nie zwraca. Nie można tworzyć obiektów typu void, bo to typ właściwie nieistniejący i kompilator nam na to nie pozwoli. Można za to tworzyć wskaźniki void*, ale w C++ uchodzi to za złą praktykę, bo pamięć, na którą wskazują te wskaźniki, można zinterpretować w dowolny sposób.

bool, czyli typ logiczny

Oznacza wartość logiczną, czyli true lub false. Często przypisuje się tym wartościom liczby 0 lub 1, ale to błędne działanie, które kompilator i tak skonwertuje. Rozmiar tego typu to co najmniej 1 bajt i ze względu na małą wartość, zazwyczaj wynosi dokładnie tyle.

sizeof(bool) >= 1 [B] (zazwyczaj równy)

char, czyli typ znakowy

To jedyny typ, który posiada stały rozmiar wynoszący 1 bajt, dlatego ma dokładnie 256 możliwych wartości.

sizeof(char) = 1 [B]

Ten typ służy do przechowywania pojedynczych znaków, które pod spodem są reprezentowane jako liczba. Wyróżniamy trzy wersje tego typu: char, unsigned char i signed char.

  • char przetrzymuje wartości od -128 do 127
  • unsigned char przetrzymuje wartości od 0 do 255

Przedrostek unsigned oznacza, że typ nie posiada liczb ujemnych, czyli może mieć wartość od 0 w górę.

Typ całkowitoliczbowy

To jeden z dwóch typów liczbowych. Jak nazwa wskazuje, służy do zapisywania liczb całkowitych. Wyróżniamy osiem wersji tego typu, które mają ograniczone rozmiary:

  • short/unsigned short – rozmiar >= 2[B]
  • int/unsigned int – rozmiar >= 2[B]
  • long/unsigned long – rozmiar >= 4[B]
  • long long/unsigned long long – rozmiar >= 8[B]

Warto zapamiętać, że jeżeli spróbujesz zapisać na nim jakieś ułamki, to część ułamkowa zostanie odrzucona bez zaokrąglenia.

Typ zmiennoprzecinkowy

Drugi typ liczbowy, w którym już nie musisz bać się ułamków. Służy do przechowywania liczb, które posiadają część ułamkową, lub są niesamowicie duże. Wyróżniamy 3 wersje tego typu:

  • float – rozmiar: zwykle 4[B]
  • double – rozmiar: zwykle 8[B]
  • long double – rozmiar: zwykle 10[B]

Wszystkie wersje mogą mieć wartości ujemne, dlatego nie mają wersji unsigned.

Typy zmiennoprzecinkowe zachowują się inaczej niż typy całkowitoliczbowe. To już bardziej zaawansowana wiedza, ale szczegóły reprezentacji liczb zmiennoprzecinkowych i operacji na nich w systemie binarnym podaje standard IEEE754. Jeśli chcesz wiedzieć więcej o IEEE754, obejrzyj to wideo.

Typ zmiennoprzecinkowy posiada specjalne wartości:

  • 0 zero i -0 zero ujemne
  • -Inf minus nieskończoność i +Inf plus nieskończoność
  • NaN (Not a Number) – sygnalizuje, że dana liczba nie jest poprawna, np. wynik dzielenia przez 0

Typy zmiennoprzecinkowe mogą przechować bardzo szeroki zakres liczbowy, ale przez to mogą być niedokładne, np. przy dodawaniu bardzo dużej liczby do bardzo małej. Z tego powodu nie zaleca się porównywać operatorem == liczb zmiennoprzecinkowych, bo wyniki są czasami niedorzeczne. Przykładem może być porównanie NaN == NaN, które da nam false.

Na co mi wiedza o wbudowanych typach danych?

Wiedza na temat wbudowanych typów danych jest kluczowa, ponieważ umożliwia poprawne przechowywanie i manipulowanie wartościami. Na przykład korzystanie z typu int zamiast double, kiedy nie jest wymagana dokładność zmiennoprzecinkowa, może zwiększyć wydajność kodu. Z drugiej strony, używanie typów danych o zbyt małym zakresie wartości, takich jak short zamiast long, może prowadzić do nieprawidłowych wyników. Dodatkowo znajomość wbudowanych typów danych jest ważna podczas pracy z funkcjami i algorytmami, ponieważ większość z nich wymaga określonych typów danych jako argumentów wejściowych i wyjściowych.

Podsumowując, bez względu na to, ile nowych typów danych sobie stworzysz, musisz znać również te zbudowane. Dzięki temu zapanujesz nad swoim kodem, poprawisz jego wydajność i unikniesz błędów.

Więcej o podstawach języka C++ dowiesz się z naszego kursu Podstawy C++.

 

*standard języka C++ tak naprawdę nie definiuje rozmiaru bajta i na niektórych egzotycznych platformach sprzętowych bajt może mieć inny rozmiar, np. 7 bitów

ninjaletter

A może Ninjaletter?

Chcesz wiedzieć, co słychać w C++ i nie tylko? Zapisz się na Ninjaletter i otrzymuj od nas co miesiąc dawkę wartościowych treści o C++ i zadania rekrutacyjne. Do tego dorzucamy darmowe materiały, spoilery o nowych kursach, specjalne promocje dla ninjaletterowiczów i wiele, wiele innych. To co, skusisz się?

Łukasz Ziobroń

Łukasz Ziobroń

Zmieniam ludzi w prawdziwych programistów. W nauczaniu stosuję grywalizację, andragogikę i neurodydaktykę.

Najnowsze artykuły

good programming practices

Good programming practices – Coding Dojo

Training in a form of Coding Dojo. Participants start with a code review of a small application. They note down their comments. After that, the trainer presents bad and good programming practices. Participants discuss what can be applied in a reviewed code and start fixing it in a form of Coding Dojo.

Czytaj »

Popular C++ Idioms – Coding Dojo

The training starts with a code review of a small application (pre-work). Participants note their thought and discuss their findings in groups. Then popular C++ idioms are presented (the concept and some code) – about 15-20 minutes each. After that participants need to use some of the idioms in a reviewed application code.

Czytaj »
performance optimisations

Performance optimisations

This training is about writing more robust C++ code and algorithms with the help of CPU caches and a compiler. Benchmarking tools are used to show performance gains.

Czytaj »
C++ toolset

C++ toolset

Covers a lot of ground about C++ related tools: build systems, compilers, debuggers, static and dynamic binary analyzers. It is focused more on discovering useful tools, that can solve many software engineering problems.

Czytaj »

Templates – Advanced techniques

Basic usage of C++ templates may not be enough to utilize opportunities, which were introduced in the latest C++ standards. From C++11 we can use templates with any number of parameters and use a simplified mechanism for SFINAE, which is claimed to be a real C++ wizardry.

Czytaj »
templates – basics

Templates – Basics

Templates are pointed out to be the most difficult part of the C++ language. Difficult, but very useful. They allow writing very generic and universal code. Thanks to them, we can avoid code duplication, but also, make it incomprehensible for beginners. This session allows for gaining the necessary knowledge and good practices on using templates.

Czytaj »
STL algorithms in C++ 17

STL Algorithms in C++ 17

This training focuses on the effective use of C++ documentation to implement applications with the use of STL algorithms. First part is mainly theoretical, but there are many short exercises (in a paper form) to apply knowledge instantly and force participants to think and search for solutions in the documentation. The other part is a group activity – implementation of the cryptographic application with proper STL algorithms instead of raw loops.

Czytaj »
STL containers

STL Containers

This training focuses on the effective use of C++ documentation. Computational complexity issues are mentioned. There are many short exercises to apply knowledge instantly and force participants to think and search for solutions in the documentation.

Czytaj »
ninjaletter

Już uciekasz?

Zanim to zrobisz, zapisz się na Ninjaletter, aby wiedzieć, co piszczy w C++. 

Informujemy, iż w celu realizacji usług dostępnych w naszym serwisie, optymalizacji jej treści, dostosowania strony do Państwa indywidualnych potrzeb oraz wyświetlania, personalizacji i mierzenia skuteczności reklam w ramach zewnętrznych sieci reklamowych korzystamy z informacji zapisanych za pomocą plików cookies na urządzeniach końcowych użytkowników. Pliki cookies można kontrolować za pomocą ustawień swojej przeglądarki internetowej. Dalsze korzystanie z naszego serwisu, bez zmiany ustawień przeglądarki internetowej oznacza, iż użytkownik akceptuje stosowanie plików cookies. Więcej informacji zawartych jest w polityce prywatności serwisu.