C/C++ - podstawowe typy zmiennych - TechPolska.pl

Warning: count(): Parameter must be an array or an object that implements Countable in /home/limera/public_html/techpolska.pl/wp-content/themes/hotmagazine/fullwidth.php on line 10

C/C++ – podstawowe typy zmiennych

Każdy programista rozpoczynający swoją przygodę z programowaniem w języku C++ musi poznać zmienne, ich typy oraz zasięg.
Jest to niezwykle ważne, by umiejętnie je dobierać oraz wykorzystywać, a także znać właściwości, które mogą nam pomóc w naszej karierze programisty.
Omówię dzisiaj podstawy, a także ciut bardziej rozbuduję to, w jaki sposób możemy daną zmienną wykorzystać.

 

Czym jest zmienna?

W dużym i niezbędnym skrócie można powiedzieć, że zmienną w informatyce charakteryzują trzy podstawowe wartości:
– nazwa
– adres
– wartość

Dodatkowo w językach ze statycznym typowaniem, jak C++ właśnie, musimy określić typ naszej zmiennej, aby móc ją poprawnie zadeklarować.
Przykładowo zmienna:

int someVariable = 10;

To zmienna typu integer, przechowująca wartości całkowicie, o nazwie someVariable, do której przypisano wartość 10, a sama jest zagnieżdżona gdzieś w pamięci naszego komputera, zajmując przy tym 4 bajty (dokładny adres pomoże nam sprawdzić operator &).

 

Nazewnictwo zmiennych

Aby nazwać daną zmienną, musimy zmieścić się w pewnych ramach i trzymać określonych zasad.
Czego nam NIE wolno zrobić:
– używać pustych znaków, np. spacji (int some Variable)
– zaczynać nazw od liczb (int 123someVariable)
– nadawać jako nazwę słowo kluczowe (int switch)
– korzystać ze znaków specjalnych (int some!Variable)
– używać polskich liter (int śomęVąriabłę)
– łączyć zmiennych ze wskaźnikami (int someVariable, *somePointer)
– nadawać dwóch takich samych nazw (int someVariable i float someVariable)

Są to zakazy, których trzeba przestrzegać, jeśli chcemy, aby nasz program się poprawnie skompilował.

Z drugiej strony, warto też znać dobre nawyki, jakie złapać powinien każdy programista przy nadawaniu nazw zmiennym:
– zapisywać je małymi literami (int some)
– w przypadku kilku wyrazów stosować jasny i czytelny przekaz (int someVariable lub int some_variable)
– wiele zmiennych zapisywać w jednej linii (int a, b, c, d, e)
– jako nazwę stosować klarowny opis przeznaczenia (int enemyHealth)

Kilka wzorców śmiało można by jeszcze wymienić, jednak to na tych wymienionych wyżej nie tyle należy, ile trzeba się wręcz skupić, zaczynając pisać w C++.
Należy też pamiętać, że wszystkie podane wyżej informacje składają się na coś, co nazywamy deklaracją zmiennej. Są to słowa, do których gęsto i często będziemy wracać.

 

Typy zmiennych

Zanim przejdę do właściwego omówienia, trzeba wspomnieć tutaj o przedrostkach signed oraz unsigned.
Określają nam, jaki przedział liczb jest w stanie przechować dana zmienna.

O ile każda deklaracja domyślnie jest ze znakiem, co oznacza, że signed int someVariable równe jest int someVariable.
Dzięki temu wiemy, że dana zmienna przechowuje liczby z zakresu od -2147483648, do 2147483647.

W przypadku unsigned int someVariable sytaucja się drastycznie zmienia, a zakres to: 0 do 4294967295.

Należy o tym pamiętać, aby umiejętnie i z głową korzystać z danego przedrostka. W końcu aplikacja służąca do pomiaru temperatury nie może operować jedynie na liczbach dodatnich!

 

integer

Podstawowy typ zmiennej przechowujący wartości całkowite.
Jest on tak rozpoznawalny i powszechnie stosowany, że nawet osoby niezwiązane z informatyką, czy stricte programowanie, niejednokrotnie doskonale go kojarzą!
Oto jego krótka charakterystyka:

Deklaracja: int someVariable = 10;
Rozmiar: 4 bajty (32 bity)
Typ przechowywanych danych: liczby całkowite

Większość operacji początkujący programista będzie przeprowadzał właśnie na nim.
Trzeba też pamiętać, że rozmiar zmiennej zależny jest w dużej mierze od architektury naszego sprzętu oraz samego kompilatora, dlatego może się zdarzyć, że ktoś napotka na int o rozmiarze nie 4, a 2 bajtów.

Z tego samego też powodu, bardzo często int i long są sobie równoznaczne.
W moim wypadku dane oparte są na wyniku, jaki zwróciła funkcja sizeof() dla każdej zmiennej, a także GCC 7.2.0.

Warto jednak wiedzieć, że nie jest to jedyna możliwość deklaracji typu całkowitego w języku C++, istnieją także:

char
– Deklaracja: char someVariable = 122; lub char someVariable = 'z';
– Rozmiar: 1 bajt (8 bitów)
– Typ przechowywanych danych: liczby całkowite lub pojedyncze znaki

short int
– Deklaracja: short someVariable = 255; lub short int someVariable = 255;
– Rozmiar: 2 bajty (16 bitów)
– Typ przechowywanych danych: liczby całkowite

long int
– Deklaracja: long someVariable = 10; lub long int someVariable = 10;
– Rozmiar: 8 bajtów (64 bity)
– Typ przechowywanych danych: liczby całkowite

Spotkać można także zapis long long int, który wynika z wymienionej wcześniej zależności, że sam long może (lecz nie musi) być równy 4 bajtom.
Oczywiście do każdego typu śmiało możemy dodać przedrostek unsigned, wedle potrzeb.

Dziwić może także obecność typu char, o którym szerzej rozpiszę się niżej – coby jednak nie mówić, jest to typ, który także przechowuje liczby całkowite, w końcu kod ASCII po coś istnieje.

 

float

Po przeczytaniu wcześniejszych wersów bardzo szybko nasuwa się myśl, co jeśli mam liczbę po przecinku? Np. 3.14? Co w danej sytuacji mogę zrobić?

Zadeklarowanie zmiennej int w taki sposób: int someVariable = 3.14 spowoduje, że wszystko, co po przecinku zostanie po prostu ucięte. Nie zaokrąglone – ucięte!
A to dlatego, że typ ten przechowuje jedynie liczby całkowite.

Z pomocą przychodzi nam float – typ zmiennoprzecinkowy.
To dzięki niemu oraz znakowi kropki, będącego uosobieniem przecinka, możemy zapisywać znacznie dokładniej wyniki naszych obliczeń.
Oto krótka charakterystyka:

Deklaracja: float fpUnit = 3.14 lub float fpUnit = 0.14 lub float fpUnit = .14;
Rozmiar: 4 bajty (32 bity)
Precyzja: 6-7 miejsc po przecinku
Typ przechowywanych danych: liczby zmiennoprzecinkowe

Czy to oznacza, że do float nie mogę przypisać po liczby całkowitej? Albo, dlaczego tylko .14 a nie 0.14?
Ależ nikt nam nie broni stosowania float w formie int. Jeśli jednak wiemy, że nie będziemy korzystać z przecinka, jaki ma to sens?
Wprowadza to tylko niepotrzebny zamęt i swego rodzaju utrudnia czytanie kodu.
Poza tym float powstał z myślą o precyzyjnych obliczeniach, do nawet 20. miejsc po przecinku!

A co z .14? Odpowiedź jest prosta.
Skoro jest kropka, a przed nią nie ma żadnej wartości, to kompilator po prostu wie, że tam stoi zwykłe 0.
Jest to usprawnienie pisania kodu na poziomie z wykorzystanie i++, w miejsce i+1.

Czy istnieje możliwość zwiększenia precyzji? Jak najbardziej!
Oto przykłady z krótkim opisem:

double
– Deklaracja: double fpUnit = 3.14 lub double fpUnit = 0.14 lub double fpUnit = .14;
– Rozmiar: 8 bajtów (64 bity)
– Precyzja: 15-16 miejsc po przecinku
-Typ przechowywanych danych: liczby zmiennoprzecinkowe

long double
– Deklaracja: long double fpUnit = 3.14 lub long double fpUnit = 0.14 lub long double fpUnit = .14;
– Rozmiar: 16 bajtów (128 bitów)
– Precyzja: 33-36 miejsc po przecinku
– Typ przechowywanych danych: liczby zmiennoprzecinkowe

Jak widać – ze zwiększaniem precyzji naszych obliczeń, znacznie wzrasta także rozmiar samej zmiennej.
Dlatego tak ważne jest stosować odpowiedni typ, żeby nie zabić optymalizacji naszego kodu!

Dodatkowo możemy także wspomnieć o precyzji naszych obliczeń i tym jak mają być traktowane, np. zaokrąglanie do dwóch miejsc po przecinku.
Coś takiego jest możliwe, a do tego bardzo często i gęsto się z tego korzysta – my dzisiaj tylko o tym wspomnimy, na szerszy opis przyjdzie czas przy operacjach matematycznych.

 

char

Mimo że przelotnie o nim wspomniałem, przy typie całkowitym, to jego pierwotne przeznaczenie jest zgoła inne.
Owszem, przechowuje on liczby z zakresu -128 do 127, ale jest to typ znakowy.

Liczby robią tutaj reprezentację kodu ASCII. To dzięki nim nasz program potrafi przechowywać pojedyncze litery czy znaki specjalne.
Ważne jest, aby zapamiętać, że tylko pojedyncze znaki.
Do całych łańcuchów wykorzystuje się tablice albo typ string, którego dzisiaj nie będę omawiał, zasługuje on na swój osobny artykuł.

Krótka charakterystyka char wygląda następująco:

Deklaracja: char z = 'z'; lub char z = 122;
Rozmiar: 1 bajt (8 bitów)
Typ przechowywanych danych: pojedyncze znaki lub liczby całkowite

Elastyczność i szeroka gama zastosowań, polegająca głównie na umiejętnościach programisty, sprawia, że char jest podstawowym typem danych, który każdy powinien znać.

 

bool

Jest typem logicznym, bardzo prostym w swoim zastosowaniu.
Oznacza albo prawdę, albo fałsz. Czysto teoretycznie w języku C++ wszystko większe od 0 jest prawdą, więc równie dobrze można wykorzystać typ int, char, a nawet jakby ktoś chciał, to long double.

Jednak znaczącą ich wadą jest rozmiar, bowiem boolean zajmuje zaledwie jeden bajt. Więcej mu po prostu nie potrzeba.
Dodatkowo nikt nie zmusza nas do korzystania z 0 i 1! Oto dlaczego:

Deklaracja: bool onlyTrue = true; lub bool onlyTrue = 1;
Rozmiar: 1 bajt (8 bitów)
Typ przechowywanych danych: logiczna prawda lub fałsz

Osobiście nie jest zwolennikiem słownego zapisywania tych wartości, niemniej jednak bool nam to umożliwia w prosty i przejrzysty sposób.

 

Podsumowanie

Typów zmiennych oraz wariacji na ich temat jest znacznie więcej.
W tym artykule pokrótce przedstawiłem najważniejsze informacje o podstawowych typach, jakie powinien znać każdy programista.
W przyszłości będzie należało także wspomnieć o string, o tym jako można go pominąć, dlaczego C++ jest znacznie bardziej przejrzyste, niż C, o zasięgach zmiennych, właściwościach tych niewyzerowanych i wiele, wiele więcej.

Jak to mówią: stay tuned and cheers!

C/C++ – podstawowe typy zmiennych
Oceń ten post!

Login

Welcome! Login in to your account

Remember me Lost your password?

Lost Password