为int类型变量创建溢出和下溢,并在C中输出值

时间:2018-03-16 21:33:15

标签: c

我必须编写一个程序来为int类型变量创建溢出和下溢,并在发生上溢或下溢时以十进制和十六进制输出变量的值。

所以这是我的代码:

 $(".exercise-button").attr("disabled", true);

答案应该是

#include <stdio.h>
#include <limits.h>

int main() {


   int delta = INT_MAX;
   printf("\n delta = %d (%4x)", delta, delta);
   delta = delta + 1;
   printf("\n delta +1 = %d (%4x)", delta, delta);
   delta = delta +2;
   printf("\n delta +2 = %d (%4x)", delta, delta);

   printf("\n");

   int delta_min = INT_MIN;
   printf("\n delta_min = %d (%4x)", delta_min, delta_min);
   delta_min = delta_min - 1;
   printf("\n delta_min -1 = %d (%4x)", delta_min, delta_min);
   delta_min = delta_min -2;
   printf("\n delta_min -2 = %d (%4x) \n\n", delta_min, delta_min);

return 0;
}

但我的答案就像

一样
delta         = 2147483647   (7fffffff)
delta +1      = -2147483648  (80000000)
delta + 2     = -2147483647  (80000001)

delta_min     = -2147483648  (80000000)
delta_min -1  = 2147483647   (7fffffff)
delta_min -2  = 2147483646   (7ffffffe)

我无法弄清楚我在这里做错了什么。我不是要你解决我的作业。只是一个提示非常有帮助!

感谢您花时间阅读它〜

2 个答案:

答案 0 :(得分:0)

看起来您不确定为什么添加3而不是添加2。

delta + 2     = -2147483646  (80000002)    <<

这是因为您重新分配了delta变量,而不是将结果存储在单独的变量中。

delta = delta + 1 // delta is reassigned to -2147483648
// delta + 1     = -2147483648  (80000000)
delta = delta + 2 // Here is the problem. It should be delta + 1.
// delta + 2     = -2147483646  (80000002)    <<

相反,你应该每次加1。

答案 1 :(得分:0)

保持所有关于未定义行为的好评论未定义,为了练习,你得到的结果“有意义”。你从INT_MAX开始:

int delta_min = INT_MAX;

delta         = 2147483647   (7fffffff)

添加一个,让你溢出:

delta = delta + 1;

delta +1      = -2147483648  (80000000)

然后你添加两个,你得到的值现在增加了两个:

delta = delta +2;

delta + 2     = -2147483646  (80000002)    <<

输出对我来说似乎“正确”。您获得的最终值实际上是delta_min + 3。有几种简单的方法可以解决这个问题,我相信你能够弄明白。