我必须编写一个程序来为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)
我无法弄清楚我在这里做错了什么。我不是要你解决我的作业。只是一个提示非常有帮助!
感谢您花时间阅读它〜
答案 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
。有几种简单的方法可以解决这个问题,我相信你能够弄明白。