0

问题已解决:它仍然无法在 Code::Blocks 上运行,因此它与 Codeblocks 有关。

我对以下 C 代码有疑问。它应该显示“short int”的最大/最小值。我很确定它是正确的,但它似乎不适用于我的机器。

作为输出,我只得到一个零而不是所需的 +32767 和 -32768。

如果有人可以为我验证这确实不是代码中的问题,而是我的软件的问题。

PS:我尝试在别人的机器上运行代码,它在那里运行良好。

#include <stdio.h>

int main()
{

short int si=0;
short int si_pred=0;

while (si>=0) {
    si_pred=si;
    si++;

}
printf("%d lowest possible value for a short int.\n",si);
printf("%d highest possible value for a short int.\n",si_pred);
return 0;
}
4

2 回答 2

1

您的while循环提前终止,因为您设置si0,并且您的循环只会在 时运行si > 0。试试这个,因为你知道最大的int 应该至少是 1:

short int si = 1;

现在你的循环不会短路,因为1 > 0.

或者,更好的是,只需将循环条件设置为检查si >= 0.

while(si >= 0) {
   si_pred = si;
   si++;
}
于 2013-10-25T17:04:22.367 回答
1

问题不在于 Code::Blocks。问题是有符号整数溢出的行为是未定义的。您不会从编译器到编译器获得一致的结果,因为编译器不需要以任何特定方式处理有符号整数溢出。无法保证将 1 添加SHRT_MAXSHRT_MIN.

正确的做法是在源代码中包含“limits.h”并检查 和 的SHRT_MINSHRT_MAX

于 2013-10-25T17:32:49.490 回答