Zmienne i stałe 31
Jednym z problemów programistycznych jest kiedy definiować zmienne jako long, a kiedy jako short. Reguła jest tutaj bardzo prosta: Jeśli istnieje szansa, że wartość, którą będziesz przypisywał do zmiennej przekroczy dopuszczalny zakres tej zmiennej to wykorzystaj większy typ.
Jak widać w tabeli 3.1, zmienne typu unsigned short, przy założeniu, że są one dwubajtowe, mogą przechowywać wartości nie większe niż 65535. Zmienne typu signed int mogą przechować wartość dodatnią o połowę mniejszą. Mimo że zmienne unsigned long mogą reprezentować bardzo duże liczby (do 4294967295), to są one i tak ograniczone. Jeśli potrzebujesz większych liczb, to musisz odwołać się do zmiennych typu float lub double, lecz wtedy tracisz na precyzji w reprezentacji liczb. Zmienne float i double mogą przyjmować ekstremalnie duże wartości, lecz na większości komputerów jedynie pierwsze 7 lub 19 cyfr jest znaczących. Oznacza to, że liczba jest zaokrąglana na pozostałych miejscach.
Przekraczanie zakresu w zmiennych unsigned
Fakt, że zmienne typu unsigned long mają ograniczony zakres wartości raczej rzadko stanowi problem. Ale co się dzieje gdy jednak przekroczymy dopuszczalny zakres?
Kiedy liczba całkowita bez znaku (unsigned) osiągnie swoją maksymalną wartość, to wraca do początku zakresu - do zera (tak jak licznik w magnetofonie). Listing 3.4. pokazuje co dzieje, gdy próbujemy przechować zbyt dużą wartość w zmiennej typu short.
1: tinclude <iostream.h>
2: int main()
3: {
4: unsigned short int malaLiczba;
5: malaLiczba = 65535;
6: |
cout « "mała |
liczba |
" « |
malaLiczba |
« |
endl |
7: |
malaLiczba++; | |||||
8: |
cout « "mała |
liczba |
" « |
malaLiczba |
« |
endl |
9: |
malaLiczba++; | |||||
10: |
cout « "mała |
liczba |
" « |
malaLiczba |
« |
endl |
11: |
return 0; | |||||
12: |
1 |
mała liczba: 65535 mała liczba: 0 mała liczba: 1
Jednym z problemów programistycznych jest kiedy definiować zmienne jako long, a kiedy jako short. Reguła jest tutaj bardzo prosta: Jeśli istnieje szansa, że wartość, którą będziesz przypisywał do zmiennej przekroczy dopuszczalny zakres tej zmiennej to wykorzystaj większy typ.
Jak widać w tabeli 3.1, zmienne typu unsigned short, przy założeniu, że są one dwubajtowe, mogą przechowywać wartości nie większe niż 65535. Zmienne typu signed int mogą przechować wartość dodatnią o połowę mniejszą. Mimo że zmienne- unsigned long mogą reprezentować bardzo duże liczby (do 4294967295), to są one i tak ograniczone. Jeśli potrzebujesz większych liczb, to musisz odwołać się do zmiennych typu float lub double, lecz wtedy tracisz na precyzji w reprezentacji liczb. Zmienne float i double mogą przyjmować ekstremalnie duże wartości, lecz na większości komputerów jedynie pierwsze 7 lub 19 cyfr jest znaczących. Oznacza to, że liczba jest zaokrąglana na pozostałych miejscach.
Przekraczanie zakresu w zmiennych unsigned
Fakt, że zmienne typu unsigned long mają ograniczony zakres wartości raczej rzadko stanowi problem. Ale co się dzieje gdy jednak przekroczymy dopuszczalny zakres?
Kiedy liczba całkowita bez znaku (unsigned) osiągnie swoją maksymalną wartość, to wraca do początku zakresu - do zera (tak jak licznik w magnetofonie). Listing 3.4. pokazuje co dzieje, gdy próbujemy przechować zbyt dużą wartość w zmiennej typu short.
(tinclude <iostream.h> int main ()
{
unsigned short int malaLiczba; malaLiczba = 65535; | |||||
cout « "mała malaLiczba++; |
liczba:' |
' « |
malaLiczba |
« |
endl ; |
cout « "mała malaLiczba++; |
liczba:' |
' « |
malaLiczba |
« |
endl; |
cout « "mała return 0; |
liczba:' |
’ « |
malaLiczba |
« |
endl; |
1:
2:
3:
-1 : 5: 6: 7:
9 : 9: 10: 11: 12:
mała liczba: 65535 mała liczba: 0 mała liczba: 1