32 Godzina 3
32 Godzina 3
ANALIZA:
W linii 4 deklarowana jest zmienna malaLiczba jako unsigned short int, który zazwyczaj zajmuje 2 bajty i może przechowywać wartości od 0 do 65535. W linii 5 do zmiennej tej przypisywana jest maksymalna wartość. Wartość ta wypisywana jest w linii 6.
W Unii 7 zmienna malaLiczba jest zwiększana o 1 (inkrementowana). Symbolem inkrementacji jest ++. Zatem wartość zmiennej malaLiczba powinna teraz wynosić 65536. Ale zmienna typu unsigned short int nie może zawierać wartości większej niż 65535, zatem wartość zmiennej zostaje „zawinięta” i wraca do zera. Efekt ten widać w linii 8 — wypisywane jest zero.
W linii 9 zmienna malaLiczba jest ponownie inkrementowana, jej nowa wartość, 1, jest wypisywana.
Zmienne signed różnią się od unsigned. Tutaj połowa możliwych do reprezentowania wartości jest ujemna. Kiedy przekroczy się zakres z jednej strony to przejdzie się na drugą stronę. Przekroczenie maksymalnej dodatniej wartości spowoduje przejście na maksymalną ujemną. Listing 3.5. pokazuje, co się stanie kiedy dodamy 1 do maksymalnej dodatniej liczby typu signed short int.
Listing 3.5. Demonstracja próby przechowania zbyt dużej wartości w zmiennej
signed short int
1:
2:
3:
4:
5:
6:
7:
8:
9:
10
11
12
#include Ciostream.h> int main()
<
short int malaLiczba; malaLiczba = 32767;
cout « "mała liczba:" « malaLiczba « endl; malaLiczba++;
cout « "mała liczba:” « malaLiczba « endl; malaLiczba++;
cout « "mała liczba:” « malaLiczba « endl; return 0;
}
mała liczba: 32767 mała liczba: -32768 mała liczba: -32767
ANALIZA:
W linii 4 deklarowana jest zmienna malaLiczba, tym razem jak signed short int (jeśli nie napiszemy słowa unsigned, to zostanie ona potraktowana jako signed). Program postępuje tak jak poprzedni, lecz inny jest efekt działania. Żeby w pełni zrozumieć, co się stało, musisz zapoznać się z reprezentacją bitową liczb ze znakiem. Szczegóły znajdziesz w Dodatku C -„System dwójkowy i szesnastkowy”.
W linii 4 deklarowana jest zmienna malaLiczba jako unsigned short int, który zazwyczaj zajmuje 2 bajty i może przechowywać wartości od 0 do 65535. W linii 5 do zmiennej tej przypisywana jest maksymalna wartość. Wartość ta wypisywana jest w linii 6.
ANALIZA:
W linii 7 zmienna malaLiczba jest zwiększana o 1 (inkrementowana). Symbolem inkrementacji jest ++. Zatem wartość zmiennej malaLiczba powinna teraz wynosić 65536. Ale zmienna typu unsigned short int nie może zawierać wartości większej niż 65535, zatem wartość zmiennej zostaje „zawinięta" i wraca do zera. Efekt ten widać w linii 8 - wypisywane jest zero.
W linii 9 zmienna malaLiczba jest ponownie inkrementowana, jej nowa wartość, 1, jest wypisywana.
Zmienne signed różnią się od unsigned. Tutaj połowa możliwych do reprezentowania wartości jest ujemna. Kiedy przekroczy się zakres z jednej strony to przejdzie się na drugą stronę. Przekroczenie maksymalnej dodatniej wartości spowoduje przejście na maksymalną ujemną. Listing 3.5. pokazuje, co się stanie kiedy dodamy 1 do maksymalnej dodatniej liczby typu signed short int.
Listing 3.5. Demonstracja próby przechowania zbyt dużej wartości w zmiennej
signed short int
1 |
#include <iostream.h> | |||||
2 |
int |
main () | ||||
3 |
{ | |||||
4 |
short int malaLiczba; | |||||
5 |
malaLiczba = 32767; | |||||
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: 32767 mała liczba: -32768 mała liczba: -32767
ANALIZA:
W linii 4 deklarowana jest zmienna malaLiczba, tym razem jak signed short int (jeśli nie napiszemy słowa unsigned, to zostanie ona potraktowana jako signed). Program postępuje tak jak poprzedni, lecz inny jest efekt działania. Żeby w pełni zrozumieć, co się stało, musisz zapoznać się z reprezentacją bitową liczb ze znakiem. Szczegóły znajdziesz w Dodatku C -„System dwójkowy i szesnastkowy”.