Istnieją dwa powody, dla których powinieneś zwracać uwagę na różne typy danych liczbowych.
1. Oszczędzanie pamięci
for(long k=0;k<=10;k++)
{
//stuff
}
Po co używać długiej, gdy równie łatwo może być liczbą całkowitą, a nawet bajtem? W ten sposób można zaoszczędzić kilka bajtów pamięci.
2. Liczby zmiennoprzecinkowe i liczby całkowite są przechowywane w komputerze inaczej
Załóżmy, że mamy liczbę 22 zapisaną w liczbie całkowitej. Komputer przechowuje ten numer w pamięci binarnie jako:
0000 0000 0000 0000 0000 0000 0001 0110
Jeśli nie znasz systemu liczb binarnych, można to przedstawić w notacji naukowej jako: 2 ^ 0 * 0 + 2 ^ 1 * 1 + 2 ^ 2 * 1 + 2 ^ 3 * 0 + 2 ^ 4 * 1 + 2 ^ 5 * 0 + ... + 2 ^ 30 * 0. Ostatni bit może, ale nie musi być użyty do wskazania, czy liczba jest ujemna (w zależności od tego, czy typ danych jest podpisany czy niepodpisany).
Zasadniczo jest to suma wartości 2 ^ (bit place) *.
Zmienia się to w przypadku wartości z przecinkiem dziesiętnym. Załóżmy, że masz liczbę 3,75 po przecinku. Jest to określane binarnie jako 11.11. Możemy to przedstawić jako notację naukową jako 2 ^ 1 * 1 + 2 ^ 0 * 1 + 2 ^ -1 * 1 + 2 ^ -2 * 1 lub, znormalizowany, jako 1.111 * 2 ^ 2
Komputer nie może tego jednak zapisać: nie ma wyraźnej metody wyrażenia tego punktu binarnego (wersja dziesiętna w systemie liczb binarnych). Komputer może przechowywać tylko 1 i 0. W tym miejscu pojawia się zmiennoprzecinkowy typ danych.
Zakładając, że sizeof (liczba zmiennoprzecinkowa) wynosi 4 bajty, wtedy w sumie masz 32 bity. Pierwszy bit ma przypisany „bit znaku”. Nie ma pływających lub podwójnych niepodpisanych. Kolejnych 8 bitów jest używanych jako „wykładnik”, a ostatnie 23 bity są używane jako „znaczący” (lub czasami określany jako mantysa). Na przykładzie 3,75 nasz wykładnik wyniósłby 2 ^ 1, a nasze znaczenie wyniósłoby 1,111.
Jeśli pierwszy bit to 1, liczba jest ujemna. Jeśli nie, pozytywne. Wykładnik jest modyfikowany przez coś, co nazywa się „odchyleniem”, więc nie możemy po prostu zapisać „0000 0010” jako wykładnika. Odchylenie dla liczby zmiennoprzecinkowej pojedynczej precyzji wynosi 127, a odchylenie dla podwójnej precyzji (tutaj nazwa podwójnego typu danych ma swoją nazwę) wynosi 1023. 23 ostatnie bity są zarezerwowane dla znaczenia. Znaczenie to po prostu wartości PRAWO naszego punktu binarnego.
Naszym wykładnikiem będzie odchylenie (127) + wykładnik (1) lub przedstawione w postaci binarnej
1000 0000
Nasze znaczenie to:
111 0000 0000 0000 0000 0000
Dlatego 3,75 jest reprezentowane jako:
0100 0000 0111 0000 0000 0000 0000 0000
Teraz spójrzmy na liczbę 8 reprezentowaną jako liczba zmiennoprzecinkowa i jako liczba całkowita:
0100 0001 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 1000
Jak na świecie komputer doda 8,0 i 8? Lub nawet pomnóż je !? Komputer (a dokładniej komputery x86) ma różne części procesora, które dodają liczby zmiennoprzecinkowe i liczby całkowite.