Skip to content

Latest commit

 

History

History
136 lines (94 loc) · 4.21 KB

01-fundamental-types.md

File metadata and controls

136 lines (94 loc) · 4.21 KB

Podstawy C++

Typy podstawowe

Coders School

Prosta matematyka

  • 1 bajt == 8 bitów
  • W binarnym totolotku wylosowane liczby mogą mieć 0 lub 1
  • Zatem podczas losowania 8 numerków możemy otrzymać przykładowo: 1 0 1 0 1 0 1 0
  • Takich kombinacji jest dokładnie 256 -> (2^8)
  • Zatem na 1 bajcie (8 bitach) możemy zapisać 256 liczb, np. od 0 do 255
  • Jeżeli w totolotku losujemy 32 numerki, (32/8 = 4) czyli 4 bajty to takich kombinacji jest 2^32 (czyli ponad 4 miliardy)

Typ pusty - void

  • Nie można tworzyć obiektów typu void
  • Służy do zaznaczenia, że funkcja nic nie zwraca
  • Można tworzyć wskaźniki void* (zła praktyka w C++)
  • NIE służy do oznaczania, że funkcja nie przyjmuje argumentów
int fun(void) { /* ... */ }  // bad practice, C style
int fun() { /* ... */ }      // good practice, C++ style

Typ logiczny - bool

  • Rozmiar: co najmniej 1 bajt (zazwyczaj równy właśnie 1)
    • sizeof(bool) >= 1
  • 2 możliwe wartości
    • false
    • true

Typy znakowe

  • Rozmiar: 1 bajt
  • 256 możliwych wartości
  • char -> od -128 do 127
  • unsigned char -> od 0 do 255

Przedrostek unsigned oznacza, że typ jest bez znaku (bez liczb ujemnych), czyli od 0 do jakieś dodatniej wartości.

Rozmiar typów znakowych to zawsze 1 bajt.

Rozmiary dalszych typów zależą od platformy np. 32 bity, 64 bity.


Typy całkowitoliczbowe

  • short (unsigned short) - co najmniej 2 bajty
  • int (unsigned int) - co najmniej 2 bajty
  • long (unsigned long) - co najmniej 4 bajty
  • long long (unsigned long long) - co najmniej 8 bajtów

Typy zmiennoprzecinkowe

  • float - zwykle 4 bajty
  • double - zwykle 8 bajtów
  • long double - zwykle 10 bajtów (rzadko stosowany)
  • Typy zmiennoprzecinkowe zawsze mogą mieć ujemne wartości (nie istnieją wersje unsigned)
  • Posiadają specjalne wartości:
    • 0, -0 (ujemne zero)
    • -Inf, +Inf (Infinity, nieskończoność)
    • NaN (Not a Number)

Uwaga! Porównanie NaN == NaN daje false

Zaawansowana lektura: Standard IEEE754 definiujący typy zmiennoprzecinkowe


Rozmiary typów

Standard C++ definiuje taką zależność pomiędzy rozmiarami typów całkowitoliczbowych

1 == sizeof(char) \
  <= sizeof(short) \
  <= sizeof(int) \
  <= sizeof(long) \
  <= sizeof(long long);

Typ auto

W pewnych miejscach możemy użyć typu auto. Kompilator sam wydedukuje typ, np. na podstawie przypisanej wartości.

  auto num = 5;         // int
  auto num = 5u;        // unsigned int
  auto num = 5.5;       // double
  auto num = 5.f;       // float
  auto letter = 'a';    // char
  auto num = false;     // bool
  auto sth;             // compilation error, unable to deduce type

Mały suchar

Kim jest Hobbit?

Jest to 1/8 Hobbajta :)


Linki dla poszerzenia wiedzy