CodeGym /Kursy /C# SELF /Liczby i znaki w C#

Liczby i znaki w C#

C# SELF
Poziom 6, Lekcja 1
Dostępny

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
sbyte
1 bajt -128 do 127 -128, 0, 127
short
2 bajty -32 768 do 32 767 -1000, 0, 32000
int
4 bajty -2 147 483 648 do 2 147 483 647 -1000000, 0, 2000000
long
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
byte
1 bajt 0 do 255 0, 128, 255
ushort
2 bajty 0 do 65 535 1000, 65000
uint
4 bajty 0 do 4 294 967 295 100, 4000000000
ulong
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
float
4 bajty 3.14f, -0.001f pojedyncza precyzja (7 cyfr)
double
8 bajtów 3.1415, -1.7E+308 podwójna precyzja (15-16 cyfr)
decimal
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;
Użycie podkreśleń dla czytelności liczb

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).

2
Zadanie
C# SELF, poziom 6, lekcja 1
Niedostępne
Takie wyrzeźbione liczby
Takie wyrzeźbione liczby
2
Zadanie
C# SELF, poziom 6, lekcja 1
Niedostępne
Wszyscy kochają Unicode
Wszyscy kochają Unicode
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION