Переполнение
Усечение дробной части
При присвоении целым величинам вещественных значений происходит усечение (truncation) дробной части вещественного числа и работа программы продолжается.
// Пример 3.1.3
// Усечение дробной части
#include <iostream>
using namespace std;
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
double dVar=1.8;
int iVar=0;
cout << "Перед : dVar=" << dVar << "\t\t" << "iVar=" << iVar << endl;
iVar=dVar; // потеря дробной части
cout << "После : dVar=" << dVar << "\t\t" << "iVar=" << iVar << endl;
cin.get();
// Вычисление рублей и копеек
long double sum; // сумма денег
int r,k; // рубли и копейки
cout << "Введите сумму денег : ";
cin >> sum;
r=sum; // рубли
k=(sum-r)*100; // копейки
cout << "Сумма =" << r << " руб. " << k << " коп." << endl;
cin.get();
}
При работе с числовыми величинами возможно их переполнение - overflow. Значение сбрасывается в минимально/максимально возможное для данного типа и работа программы продолжается.
// Пример 3.1.4
// Переполнение беззнакового целого
#include <iostream>
using namespace std;
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
unsigned short int small; // диапазон 0-65535
small=65535;
cout << "small: " << small << "\n";
small=small+1; // увеличить на 1 -> больше,чем допустимо
cout << "small: " << small << "\n";
small++; // увеличить на 1
cout << "small: " << small << "\n";
small=small-1; // уменьшить на 1
cout << "small: " << small << "\n";
small--; // уменьшить на 1
cout << "small: " << small << "\n";
cin.get();
}
// Пример 3.1.5
// Переполнение знакового целого
#include <iostream>
using namespace std;
void main() {
setlocale( LC_ALL, "Russian"); // для вывода на экран русского текста
short int small; // диапазон от -32768 до 32767
small=32767;
cout << "small: " << small << endl;
small++;
cout << "small: " << small << endl;
small--;
cout << "small: " << small << endl;
//small=0;
//cout << "Введите целое число от -32768 до 32767 " << endl;
//cin >> small;
//cout << "Введено число " << small;
cin.get();
}