W C#, jak w każdym języku programowania, mamy coś takiego jak zmienne i typy.
Zmienne są to reprezentacje wartości jakiegoś typu w pamięci komputera.
W zmiennych można przechowywać jakieś wartości np. w zmiennej o nazwie “imie” można przechowywać wartość “Ala ma kota”, a w zmiennej o nazwie “wiek” można przechowywać liczbę 18. Każda zmienna musi być jakiegoś typu.
W C# typy zmiennych można podzielić na:
- Typy wartościowe
- Typy proste
- Typy wyliczeniowe
- Typy struktur
- Typy wartości null
- Typy wartości touple
- Typy referencyjne
- Klasy
- Interface
- Listy(Array)
- Delegaty
Dzisiaj chcę się skupić na typach prostych, które na powyższej liście są pogrubione.
Typy liczb całkowitych
Typ | Opis | Wielkość zajmowanej pamięci w komputerze | .Net typ |
sbyte | Może przyjmować wartości liczbowe od -128 do 127 | 8 bitów | System.SByte |
byte | Może przyjmować wartości liczbowe od 0 do 255 | 8 bitów | System.Byte |
short | Może przyjmować wartości liczbowe od -32 768 do 32 767 | 16 bitów | System.Int16 |
ushort | Może przyjmować wartości liczbowe od 0 do 65 535 | 16 bitów | System.UInt16 |
int | Może przyjmować wartości liczbowe od -2.147.483.648 do 2.147.483.647 | 32 bity | System.Int32 |
uint | Może przyjmować wartości liczbowe od 0 do 4 294 967 295 | 32 bity | System.UInt32 |
long | Może przyjmować wartości liczbowe od -9.223.372.036. 854.775.808 do 9.223.372.036. 854.775.807 | 64 bity | System.Int64 |
ulong | Może przyjmować wartości liczbowe od 0 do 18.446.744.073. 709.551.615 | 64 bity | System.UInt64 |
To teraz czas na przykład 🙂
Jeżeli w naszym programie chcemy mieć zmienną, w której będziemy przechowywać np. wiek człowieka możemy użyć np.
Sbyte wiekCzłowieka = 18;
Byte wiekCzłowieka = 18;
Int wiekCzłowieka = 18;
Itd.
Jeżeli wiemy, że człowiek nie ma ujemnego wieku i nie żyje 1000 lat użycie sbyte, które pozwala na ujemne wartości czy int, który potrafi przyjąć liczbę nawet 2.147.483.647 jest nie do końca optymalne. W tym wypadku najlepiej byłoby użyć Byte, ponieważ jest najbliżej naszej wartości. Dodatkowo załóżmy, że w naszym programie potrzebujemy 10 000 zmiennych. Jeżeli każda z nich będzie typu Byte, nasz program będzie potrzebował około 9kB pamięci. Jeżeli użyjemy zmiennych typu Int, wtedy nasz program zajmie około 40kB. Jak widać ten sam program, ale potrzebuje 4 razy więcej miejsca w pamięci. Warto o tym pamiętać podczas pisania programów.
Typy liczb zmiennoprzecinkowych
Typ | Opis | Wielkość zajmowanej pamięci w komputerze | .Net typ |
float | Może przyjmować wartości liczbowe od ±1,5 x 10−45 do ±3,4 x 1038 | 4 bajty | System.Single |
double | Może przyjmować wartości liczbowe od ±5,0 × 10−324 do ±1,7 × 10308 | 8 bitów | System.Double |
decimal | Może przyjmować wartości liczbowe od ±1,0 x 10-28 do ±7,9228 x 1028 | 16 bitów | System.Decimal |
W zmiennych tego typu można przechowywać np. wartości walutowe lub wynik operacji, który jest po przecinku np.
Double wynik = 5 / 2;
double a = 12.3;
Typ | Opis | Wielkość zajmowanej pamięci w komputerze | .Net typ |
bool | Wartość logiczna, która może przechowywać true albo false | 1 bit | System.Boolean |
Można użyć tego typu zmiennych np. w
CzyJestesWysoki = false;
CzyLubiszCzytacTenBlog = true;
Typ | Opis | Wielkość zajmowanej pamięci w komputerze | .Net typ |
Char | Może przechowywać dowolny znak | 16 bitów | System.Char |
String | Ciąg znaków Unicode | System.String |
W zmiennych tego typu można przechowywać pojedyńcze znaki lub ciągi znaków np.
Char litera = ‘a’;
String imie = “Ala”;
String zwierze = “Kot”;
String wiek = “18”;
W tej zmiennej można też przechowywać oczywiście liczby, ale są one traktowane jako ciąg znaków, a nie liczba.
Co to znaczy?
Przykład:
String wiekAni = “18”;
String wiekTomka = “20”;
String wiekObu = wiekAni + wiekTomka;
W zmiennej wiek dostaniemy “1820”; ponieważ obie wartości to napisy, więc zostały zlepione w jedno gdybyśmy wieli zmienne typu byte.
byte wiekAni = 18;
byte wiekTomka = 20;
byte wiekObu = wiekAni + wiekTomka;
W wyniku dostaniemy 38.
To na tyle dzisiaj. W kolejnych wpisach będę poruszał kolejne typy zmiennych jakie występują w C#.