C++数据溢出(上溢和下溢)
发布时间:2020-12-16 07:39:00 所属栏目:百科 来源:网络整理
导读:当变量的数据类型所提供的位数无法适应某个值时,就会发生 溢出(上溢) 或 下溢 。 就像往水桶里装水,水满则溢,变量也是这样,如果要存储的值超过了变量所能提供的位数,就会出现问题。 不妨来看一个例子,假设在一个使用了 2 个字节内存的 short int 类
当变量的数据类型所提供的位数无法适应某个值时,就会发生溢出(上溢)或下溢。就像往水桶里装水,水满则溢,变量也是这样,如果要存储的值超过了变量所能提供的位数,就会出现问题。 不妨来看一个例子,假设在一个使用了 2 个字节内存的 short int 类型变量中存储了以下值: ![]() ? 如果上面示例中存储的数字加 1,则该变量将变成以下位模式: ![]() 但这不是 32 768。相反,它被解释为负数,所以这不是预期的结果。二进制 1 已经“流入”到高阶位的位置,这就是所谓的溢出(上溢)。 同样地,当一个整数变量保存的数值在其数据类型负值范围的最远端(即最小负值),那么当它被减去 1 时,其高位中的 1 将变为 0,结果数将被解释为正数。这是溢出的另一个例子。 除了溢出以外,浮点值还会遇到下溢的情况。当一个值太接近于零时,就可能会发生这种问题,过小的数字需要更多数位的精度来表示它,因而无法存储在保存它的变量中。 下面的程序演示了溢出和下溢: // This program demonstrates overflow and underflow. #include <iostream> using namespace std; int main() { // Set intVar to the maximum value a short int can hold short short intVar = 32767; // Set floatVar to a number too small to fit in a float float float floatVar = 3.OE-47; // Display intVar cout << "Original value of intVar " << intVar << endl; // Add 1 to intVar to make it overflow intVar = intVar + 1; cout << "intVar after overflow " << intVar << endl; // Subtract 1 from intVar to make it overflow again intVar = intVar - 1; cout << "intVar after 2nd overflow " << intVar << endl; // Display floatVar cout << "Value of very tiny floatVar ” << floatVar; return 0; }程序输出结果:
Original value of intVar 32767 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |