Poznaj C++ w$ godziny0048

Poznaj C++ w$ godziny0048



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.

Przekraczanie zakresu w zmiennych signed

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;

}

EFEKT DZIAŁANIA:

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.

Przekraczanie zakresu w zmiennych signed

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

EFEKT DZIAŁANIA

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


Wyszukiwarka

Podobne podstrony:
Poznaj C++ w$ godziny0124 112 Godzina 8 112 Godzina 8 ANALIZA: W linii 10 rozpoczynana jest pętla wh
Poznaj C++ w$ godziny0132 120 Godzina 8 120 Godzina 8 ANALIZA: W linii 8, w instrukcji for wykonywan
Poznaj C++ w$ godziny0166 Referencje 155 Referencje 155 ANALIZA: W linii 8 deklarujemy zmienną lokal
Poznaj C++ w$ godziny0035 Program w C++ 19Funkcje ■ain() jest funkcją specjalną. Jest automatycznie
Poznaj C++ w$ godziny0046 30 Godzina 3typedef
Poznaj C++ w$ godziny0112 Więcej o klasach 99Klasy wykorzystujące inne klasy jako dane wewnętrzne Ba
Poznaj C++ w$ godziny0123 Zaawansowane sterowanie programem 111 W linii 32 obliczana jest reszta z d
Poznaj C++ w$ godziny0114 Więcej o klasach 101 32 33 34:    < 35 36 37 38 39 40 41
Poznaj C++ w$ godziny0158 Zaawansowane wykorzystanie wskaźników 147 32:    } 33: 34:
Poznaj C++ w$ godziny0217 208 Godzina 14 licz: 5 ANALIZA: W linii 11 zaszła ważna zmiana. Przeciążyl
Poznaj C++ w$ godziny0028 12 Godzina 1 Przepisz program dokładnie. Pamiętaj o wszystkich znakach. Np
Poznaj C++ w$ godziny0032 16 Godzina 2 W linii 1 do programu dołączany jest plik iostream.h. Kompila
Poznaj C++ w$ godziny0053 38 Godzina 4Białe znaki NOWY TERMIN Spacje, tabulacje, znaki końca linii o
Poznaj C++ w$ godziny0055 40 Godzina 4EFEKT DZIAŁANIA; a: Ob: 0x: Oy: 35 a: 9 b: 7 x: 16 y: 16 W lin
Poznaj C++ w$ godziny0062 Instrukcje i wyrażenia 47Instrukcja if Normalnie program wykonuje się lini
Poznaj C++ w$ godziny0081 Funkcje 67 Program wraca do funkcji main(), do linii 13. Okazuje się, że w
Poznaj C++ w$ godziny0115 102 Godzina 7 Linia 33 w listingu 7.4. rozpoczyna główny blok programu. Aż
Poznaj C++ w$ godziny0146 Wskaźniki 135 Wskaźniki 135 ANALIZA: W tym programie deklarujemy dwie zmie
Poznaj C++ w$ godziny0163 152 Godzina 10 W linii 41 wykorzystujemy wskaźnik pProst do ustalenia szer

więcej podobnych podstron