P002 - przekroczenie zakresu liczby całkowitej ze znakiem
Program uruchomiono w środowisku Bloodshed Dev-C++ 4.9.9.2
// I Liceum Ogólnokształcące
// im. K. Brodzińskiego
// w Tarnowie
//--------------------------
// Koło informatyczne 2006/7
//--------------------------
// Program: P002
//--------------------------

#include <iostream>
#include <iomanip>

using namespace std;

main()
{
  int a,b,c;

  a = 2000000000L;
  b = 1000000000L;
  c = a + b; // wynik nie mieści się w zakresie
  cout << "\na = " << setw(12) << a 
       << "\nb = " << setw(12) << b
       << "\nc = " << setw(12) << c << endl << endl;
  system("pause");
}

 

Widok okienka konsoli w uruchomionym programie
a =   2000000000
b =   1000000000
c =  -1294967296

       Wyjaśnienie

Typ danych int w języku C++ oznacza 32-bitowe liczby ze znakiem w kodzie U2. Kod U2 pozwala zapisywać liczby dodatnie i ujemne. Wynik dodawania przekracza zakres dozwolonych wartości dodatnich, który dla kodu U2 wynosi 231 - 1 = 2147483647. Najstarszy bit wyniku wchodzi na bit znaku liczby, co powoduje, iż program interpretuje ją jako liczbę ujemną.

 

2000000000(10) = 01110111001101011001010000000000(U2) =  2000000000(10)
+ 1000000000(10) =  + 00111011100110101100101000000000(U2) =  2000000000(10)
3000000000(10) =  10110010110100000101111000000000(U2) =  -1294967296(10)

 

Dokładny opis liczb całkowitych ze znakiem znajdziesz w artykule o binarnym kodowaniu liczb.

 



List do administratora Serwisu Edukacyjnego Nauczycieli I LO

Twój email: (jeśli chcesz otrzymać odpowiedź)
Temat:
Uwaga: ← tutaj wpisz wyraz  ilo , inaczej list zostanie zignorowany

Poniżej wpisz swoje uwagi lub pytania dotyczące tego rozdziału (max. 2048 znaków).

Liczba znaków do wykorzystania: 2048

 

W związku z dużą liczbą listów do naszego serwisu edukacyjnego nie będziemy udzielać odpowiedzi na prośby rozwiązywania zadań, pisania programów zaliczeniowych, przesyłania materiałów czy też tłumaczenia zagadnień szeroko opisywanych w podręcznikach.



   I Liceum Ogólnokształcące   
im. Kazimierza Brodzińskiego
w Tarnowie

©2017 mgr Jerzy Wałaszek

Dokument ten rozpowszechniany jest zgodnie z zasadami licencji
GNU Free Documentation License.