1. Jakie są liczby?
W programowaniu cały czas pracujemy z liczbami — od wieku użytkownika po liczbę gwiazd w galaktyce albo groszy na koncie bankowym. Ale różne zadania wymagają różnych rodzajów liczb: czasem ważne są tylko liczby całkowite, czasem bardzo dokładne ułamki, a czasem potrzebne są liczby "bez minusa".
Liczby całkowite (int i inne)
Liczba całkowita — to liczba bez części ułamkowej.
W C# najczęściej używa się typu int, ale oprócz niego jest jeszcze kilka opcji, które różnią się rozmiarem i zakresem.
- int — podstawowy "roboczy" typ dla liczb całkowitych. Mieści bardzo duże (i małe) wartości, a zajmuje niewiele pamięci.
Na przykład do liczenia lajków, wieku, liczby dni w roku prawie zawsze użyjesz int. - long — używany, gdy wartości mogą być naprawdę ogromne (np. miliardy albo tryliony).
Przykład: przechowywanie sumy wszystkich wyświetleń na YouTube w historii. - short — oszczędny, ale rzadko używany typ. Nadaje się tam, gdzie jest dużo takich samych małych wartości (np. dane audio, komponenty kolorów).
- byte — dla jeszcze mniejszych wartości, szczególnie w grafice i pracy z plikami, gdzie liczy się oszczędność pamięci.
Liczby zmiennoprzecinkowe (double, float, decimal)
Czasem trzeba pracować z liczbami, które mają część ułamkową. Na przykład temperatura powietrza, średnia ocen studenta, cena produktu z groszami.
- double — to domyślny typ do przechowywania liczb zmiennoprzecinkowych. Wystarczająco dokładny do większości obliczeń (przykład: 3.1415926535…).
- float — lżejszy i mniej dokładny typ, częściej spotykany w grafice komputerowej albo przy dużych tablicach danych, gdzie ważna jest oszczędność pamięci.
- decimal — przeznaczony do zadań finansowych i księgowych, kiedy trzeba zachować dokładność do grosza, żeby nie "zgubić" czegoś przez sposób przechowywania ułamków. Na przykład do przechowywania salda na koncie, ceny produktu, kursu wymiany.
Specjalne typy liczbowe
W C# są dodatkowe typy liczbowe na specjalne okazje:
- uint, ulong, ushort — "bezznakowe" typy, pozwalają używać tylko wartości dodatnich, za to zakres jest 2 razy większy niż ich "ze znakiem" odpowiedników.
- sbyte — mały, ze znakiem typ (do kompaktowego przechowywania wartości ujemnych i dodatnich od -128 do 127).
- BigInteger — jeśli musisz pracować z ogromnymi liczbami, przekraczającymi standardowe zakresy, np. w kryptografii albo obliczeniach astronomicznych.
2. Liczby ze znakiem i bezznakowe
Typ ze znakiem może przechowywać zarówno liczby dodatnie, jak i ujemne. To wygodne, gdy wartości mogą być "i powyżej, i poniżej zera": na przykład temperatura, saldo konta, wysokość względem poziomu morza.
Typ bezznakowy — tylko zero i liczby dodatnie. Nadaje się, gdy minus nie wchodzi w grę — np. liczba osób w pokoju, bajty w pliku, czas.
Przykład:
- int (ze znakiem): -10, 0, 50
- uint (bezznakowy): 0, 10, 1000
Używając typu bezznakowego, możesz zmieścić w zmiennej 2 razy większą maksymalną wartość (bo nie ma "ujemnej połowy zakresu"). Używa się ich, gdy masz pewność, że wartość nie będzie ujemna.
Typy całkowite ze znakiem
| Typ | Rozmiar | Zakres wartości | Przykład użycia |
|---|---|---|---|
|
1 bajt | -128 do 127 | -128, 0, 127 |
|
2 bajty | -32 768 do 32 767 | -1000, 0, 32000 |
|
4 bajty | -2 147 483 648 do 2 147 483 647 | -1000000, 0, 2000000 |
|
8 bajtów | -9 223 372 036 854 775 808 do 9 223 372 036 854 775 807 |
-10_000_000_000, 1 |
Typy całkowite bezznakowe
| Typ | Rozmiar | Zakres wartości | Przykład użycia |
|---|---|---|---|
|
1 bajt | 0 do 255 | 0, 128, 255 |
|
2 bajty | 0 do 65 535 | 1000, 65000 |
|
4 bajty | 0 do 4 294 967 295 | 100, 4000000000 |
|
8 bajtów | 0 do 18 446 744 073 709 551 615 | 1, 18_000_000_000_000 |
Typy zmiennoprzecinkowe
| Typ | Rozmiar | Przykład wartości | Opis |
|---|---|---|---|
|
4 bajty | 3.14f, -0.001f | pojedyncza precyzja (7 cyfr) |
|
8 bajtów | 3.1415, -1.7E+308 | podwójna precyzja (15-16 cyfr) |
|
16 bajtów | 0.1m, 12345.6789m | wysoka precyzja do finansów |
3. Sufiksy dla liczb
W niektórych sytuacjach trzeba jasno wskazać, jakiego typu chcesz użyć liczby. Robi się to za pomocą sufiksów:
- L albo l — dla typu long (np. 10000000000L)
- U albo u — dla typu uint (np. 123U)
- F albo f — dla typu float (np. 3.14f)
- D albo d — dla typu double (zwykle niepotrzebny, bo liczby zmiennoprzecinkowe bez sufiksu to double)
- M albo m — dla typu decimal (np. 99.99m — szczególnie ważne przy pieniądzach!)
Jeśli nie podasz sufiksu, to domyślnie liczba całkowita to int, a zmiennoprzecinkowa to double. Na przykład 42 to int, a 3.14 to double.
Po co to? Na przykład, żeby nie dostać błędu przy przypisaniu dużej liczby do zmiennej typu long:
long bigNumber = 9000000000L; // jeśli usuniesz L, będzie błąd kompilacji
A dla pieniędzy zawsze lepiej używać decimal z sufiksem m:
decimal price = 999.99m;
4. Podkreślenie jako separator _
Gdy liczby są długie, łatwo się pogubić w zerach. Dla wygody i czytelności w C# możesz używać podkreśleń wewnątrz liczby.
int population = 146_700_000;
long stars = 100_000_000_000L;
To całkowicie legalne: kompilator ignoruje podkreślenia, a tobie łatwiej od razu "na oko" zobaczyć rzędy. Ważne — nie stawiaj podkreślenia na początku, na końcu, po kropce ani przed sufiksem.
5. Typ znakowy char
Czasem w programie trzeba pracować nie z liczbami, a z pojedynczymi znakami: literą, cyfrą, znakiem, a nawet spacją. Do tego jest specjalny typ — char.
Co to jest char?
To zmienna, która przechowuje jeden znak:
- literę łacińską lub cyrylicę ('A', 'я')
- cyfrę ('5')
- znak specjalny ('#', '%', '@')
- znak sterujący ('\\n' — nowa linia)
Cechy szczególne:
- Wartość typu char zapisuje się w pojedynczych apostrofach: char letter = 'B';
- Tak naprawdę w środku char przechowywany jest kod liczbowy znaku (w systemie Unicode), więc char możesz porównywać, konwertować na int i nawet robić proste działania arytmetyczne:
char a = 'A';
char b = (char)(a + 1); // 'B'
int code = a; // 65 — kod litery 'A'
Możesz używać znaków specjalnych, np.: char tab = '\\t'; // znak tabulacji
Po co jest char?
Do pracy z tekstem znak po znaku (np. sprawdzania pierwszej litery w stringu, szukania znaków interpunkcyjnych, wczytywania hasła po znaku).
GO TO FULL VERSION