首页 文章

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

提问于
浏览
0

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 回答

  • 1

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

    short int si = 1;
    

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

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

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

    问题不是Code :: Blocks . 问题是有符号整数溢出的行为是 undefined . 你没有要求编译器以任何特定方式处理有符号整数溢出 . 无法保证向 SHRT_MAX 添加1将导致 SHRT_MIN .

    right 方法是在源代码中包含"limits.h"并检查 SHRT_MINSHRT_MAX 的值 .

相关问题