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.

 

 


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

©2018 mgr Jerzy Wałaszek

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

Pytania proszę przesyłać na adres email: i-lo@eduinf.waw.pl

W artykułach serwisu są używane cookies. Jeśli nie chcesz ich otrzymywać,
zablokuj je w swojej przeglądarce.
Informacje dodatkowe