问题已解决:它仍无法在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;
}
答案 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_MIN
和SHRT_MAX
的值。