P001 - przekroczenie zakresu liczby całkowitej bez znaku |
---|
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: P001 //-------------------------- #include <iostream> #include <iomanip> using namespace std; main() { unsigned a,b,c; a = 3000000000uL; b = 2000000000uL; c = a + b; // wynik nie mieści się w zakresie cout << "\na = " << setw(10) << a << "\nb = " << setw(10) << b << "\nc = " << setw(10) << c << endl << endl; system("pause"); } |
Widok okienka konsoli w uruchomionym programie |
---|
a = 3000000000 b = 2000000000 c = 705032704 |
Typ danych unsigned odnosi się w języku C++ do 32-bitowych liczb całkowitych bez znaku. Wynik dodawania przekracza 32-bity i zostaje obcięty - tracimy najstarszy bit. Dlatego w zmiennej c otrzymujemy liczbę 705032704 zamiast spodziewanej liczby 5000000000.
3000000000(10) = 10110010110100000101111000000000(2) = 3000000000(10) + 2000000000(10) = + 01110111001101011001010000000000(2) = 2000000000(10) 5000000000(10) = 100101010000001011111001000000000(2) = 705032704(10)
Dokładny opis liczb całkowitych bez znaku 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