最小值/最大值C中的短整数值

时间:2013-10-25 17:02:31

标签: c int short

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

我遇到以下C代码的问题。它应该显示“短整数”的最大/最小值。我很确定它是正确的,但它似乎不适用于我的机器。

作为输出我只得到零而不是所需的+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;
}

2 个答案:

答案 0 :(得分:1)

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

short int si = 1;

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

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

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

答案 1 :(得分:1)

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

执行此操作的正确方法是在源代码中包含“limits.h”并检查SHRT_MINSHRT_MAX的值。