[英]Min/Max Value of a short int in C
問題已解決:它仍然無法在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;
}
你的while
循環提前終止是因為你將si
設置為0
,而你的循環只會在si > 0
時運行。 試試這個,因為你知道最大的int
應該至少為1:
short int si = 1;
現在你的循環不會短路,因為1 > 0
。
或者,更好的是,只需設置循環條件以檢查si >= 0
。
while(si >= 0) {
si_pred = si;
si++;
}
問題不是Code :: Blocks。 問題是有符號整數溢出的行為是未定義的 。 您不會從編譯器到編譯器獲得一致的結果,因為編譯器無需以任何特定方式處理有符號整數溢出。 無法保證向SHRT_MAX
添加1將導致SHRT_MIN
。
正確的方法是在源代碼中包含“limits.h”並檢查SHRT_MIN
和SHRT_MAX
的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.