PROBLEM SOLVED: It still doesn't work on Code::Blocks so it has something to to with 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 回答
您的
while
循环提前终止,因为您将si
设置为0
,并且您的循环仅在si > 0
时运行 . 试试这个,因为你知道最大的int
应该至少为1:现在你的循环不会短路,因为
1 > 0
.或者,更好的是,只需设置循环条件以检查
si >= 0
.问题不是Code :: Blocks . 问题是有符号整数溢出的行为是 undefined . 你没有要求编译器以任何特定方式处理有符号整数溢出 . 无法保证向
SHRT_MAX
添加1将导致SHRT_MIN
.right 方法是在源代码中包含"limits.h"并检查
SHRT_MIN
和SHRT_MAX
的值 .