Переполнение

Усечение дробной части

 

При присвоении целым величинам вещественных значений происходит усечение (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();

}