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