Update content on data types and memory usage in programming book
This commit is contained in:
16
main.typ
16
main.typ
@@ -106,15 +106,15 @@ W następnym rozdziale omówimy różne typy danych, które można przechowywać
|
||||
3. Napisz program, który pyta użytkownika o promień koła i oblicza oraz wyświetla jego pole powierzchni (użyj wzoru: pole = $pi * r^2, "gdzie" pi approx 3.14$).
|
||||
#super[Wskazówka: Wiedza z następnego rozdziału może być przydatna do rozwiązania tych zadań.]
|
||||
== Typy danych
|
||||
W poprzednim rozdziale wprowadziliśmy koncept "pudełek" na dane, czyli zmiennych. W prawdziwym świecie, mamy różne rodzaje pudełek na różne przedmioty, nie wsadzimy przecież telewizora do pudełka po butach, bo się po prostu nie zmieści. Podobnie jest w naszych cyfrowych "pudełkach". Różne rodzaje danych wymagają różnych typów, które określają, jaki rodzaj wartości może być przechowywany w danej zmiennej oraz jak dużo miejsca w pamięci komputerowej ta wartość zajmuje. Wybór odpowiedniego typu danych jest kluczowy, ponieważ wpływa na wydajność programu oraz na to, jakie operacje można wykonywać na tych danych. O tym ile miejsca w pamięci zajmuje dany typ danych, decyduje architektura systemu operacyjnego na którym działa program (np. 32-bitowy lub 64-bitowy) oraz implementacja języka programowania.
|
||||
W poprzednim rozdziale wprowadziliśmy koncept "pudełek" na dane, czyli zmiennych. W prawdziwym świecie, mamy różne rodzaje pudełek na różne przedmioty, nie wsadzimy przecież telewizora do pudełka po butach, bo się po prostu nie zmieści. Podobnie jest w naszych cyfrowych "pudełkach". Różne rodzaje danych wymagają różnych typów. To właśnie typ określa, jaką wartość można przechować w zmiennej. Decyduje on również o tym, ile miejsca ta wartość zajmie w pamięci komputera. Wybór odpowiedniego typu danych jest kluczowy, ponieważ wpływa na wydajność programu oraz na to, jakie operacje można wykonywać na tych danych. O tym ile miejsca w pamięci zajmuje dany typ danych, decyduje architektura systemu operacyjnego na którym działa program (np. 32-bitowy lub 64-bitowy) oraz implementacja języka programowania.
|
||||
|
||||
Poniżej omówię kilka podstawowych typów danych, które są powszechnie używane w programowaniu wraz z ich rozmiarem w pamięci na typowej 64-bitowej architekturze i przykłady ich zastosowania.
|
||||
|
||||
#table(
|
||||
columns: (auto, auto, 1fr, auto),
|
||||
inset: 8pt,
|
||||
inset: 6pt,
|
||||
align: horizon,
|
||||
table.header([Typ danych], [Rozmiar w pamięci], [Zakres wartości], [Przykład wartości]),
|
||||
|
||||
"byte", "8 bitów", "0 do 255", "200",
|
||||
"sbyte", "8 bitów", "-128 do 127", "-100",
|
||||
"short", "16 bitów", "-32 768 do 32 767", "30000",
|
||||
@@ -131,6 +131,16 @@ Poniżej omówię kilka podstawowych typów danych, które są powszechnie używ
|
||||
"bool", "8 bitów", "true lub false", "true",
|
||||
)
|
||||
|
||||
W tabeli powyżej przedstawiłem podstawowe typy danych w języku C\#. Oczywiście, istnieją też bardziej zaawansowane typy danych, takie jak tablice, listy, czy klasy, które omówię w dalszej części książki.
|
||||
|
||||
Warto zauważyć, że mamy do typów liczbowych podział na liczby ze znakiem i bez znaku. Liczby ze znakiem (np. `int`, `long`) mogą przechowywać zarówno wartości dodatnie, jak i ujemne, natomiast liczby bez znaku (np. `uint`, `ulong`) mogą przechowywać tylko wartości dodatnie, ale za to mają większy zakres wartości dodatnich, ponieważ nie muszą rezerwować miejsca na liczby ujemne.
|
||||
|
||||
Typ `float` jest typem zmiennoprzecinkowym pojedynczej precyzji, co oznacza, że przechowuje liczby z mniejszą dokładnością (około 7 cyfr znaczących). Natomiast `double` jest typem zmiennoprzecinkowym podwójnej precyzji, który przechowuje liczby z większą dokładnością (około 15-16 cyfr znaczących). Typ `decimal` jest używany głównie do obliczeń finansowych, ponieważ oferuje bardzo wysoką precyzję i unika problemów związanych z reprezentacją liczb zmiennoprzecinkowych.
|
||||
|
||||
Możesz się zastanawiać, dlaczego typ `bool` zajmuje 8 bitów, skoro może przyjmować tylko dwie wartości: `true` lub `false`. Powodem jest to, że w większości architektur komputerowych, najmniejszą jednostką pamięci, którą można zaadresować, jest bajt (8 bitów). Dlatego nawet jeśli zmienna typu `bool` potrzebuje tylko jednego bitu do przechowywania swojej wartości, to i tak zajmuje cały bajt w pamięci. Aczkolwiek istnieją sposoby, by zaoszczędzić miejsce, na przykład poprzez pakowanie wielu wartości `bool` w jeden bajt, ale to już bardziej zaawansowany temat.
|
||||
|
||||
W poprzednim rozdziale użyliśmy metody `Convert.ToInt32()`, aby przekonwertować dane wejściowe od użytkownika (które są w formie tekstowej) na liczbę całkowitą. Dzieje się tak dlatego, że metoda `Console.ReadLine()` zwraca wartość typu `string`, a my chcemy przechować tę wartość w zmiennej typu `int`. Próba bezpośredniego przypisania wartości zwróconej przez `Console.ReadLine()` do zmiennej `age` spowodowałaby błąd kompilacji, ponieważ typy danych muszą być zgodne. Programista, więc ma narzędzia do konwersji między różnymi typami danych, takie jak `Convert.ToInt32()`, które umożliwiają przekształcenie wartości z jednego typu na inny, o ile jest to logicznie możliwe, ale o konwersji między typami danych opowiem więcej w dalszej części książki.
|
||||
|
||||
== Instrukcje sterujące programem
|
||||
=== Instrukcje warunkowe
|
||||
==== Przykład
|
||||
|
Reference in New Issue
Block a user