我想寫一個簡單的C代碼,顯示在C中的各種變量類型的最大值和大小。但是,我得到了一些奇怪的輸出,如sizeof()操作符返回-1的一些變量類型。我認爲問題在於我在printf命令中使用的說明符,因爲當我在下面的代碼中將'%e'更改爲'%d'時,即使對於沒有更改的說明符,我也會得到非常不同的輸出。我的問題是如何獲得正在尋找的正確輸出,即第一列中變量類型的最大值和第二列中變量類型的大小。C中limits.h * _MAX常量的正確說明符是什麼?
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#include <float.h>
int main()
{
printf("Float max: %e Nbytes: %d\n",FLT_MAX,sizeof(float));
printf("Double max: %e Nbytes: %d\n",DBL_MAX,sizeof(double));
printf("Int max: %e Nbytes: %d\n",INT_MAX,sizeof(int));
printf("UnInt max: %e Nbytes: %d\n",UINT_MAX,sizeof(unsigned int));
printf("LongIntmax: %e Nbytes: %d\n",LONG_MAX,sizeof(long));
printf("UnLong max: %e Nbytes: %d\n",ULONG_MAX,sizeof(unsigned long));
printf("Longlongmax: %e Nbytes: %d\n",LLONG_MAX,sizeof(long long));
exit(0);
}
輸出我從爲編寫的代碼得到如下:
Float max: 3.402823e+38 Nbytes: 4
Double max: 1.797693e+308 Nbytes: 8
Int max: 1.797693e+308 Nbytes: 2147483647
UnInt max: 1.797693e+308 Nbytes: -1
LongIntmax: 1.797693e+308 Nbytes: -1
UnLong max: 1.797693e+308 Nbytes: -1
Longlongmax: 1.797693e+308 Nbytes: -1
但是,如果切換所有的「%E」到「%d」我再次得到運行代碼:
Float max: 4 Nbytes: -1290994504
Double max: 8 Nbytes: 605613584
Int max: 2147483647 Nbytes: 4
UnInt max: -1 Nbytes: 4
LongIntmax: -1 Nbytes: 8
UnLong max: -1 Nbytes: 8
Longlongmax: -1 Nbytes: 8
第一次運行的第二列輸出成爲第二次運行的第一列輸出。我不確定這裏發生了什麼事。再次,我認爲我將錯誤的說明符綁定到* _MAX常量,但我不確定是否還有其他問題。
'sizeof'不返回-1(打印最大的無符號值時,將它作爲有符號值打印到la'%d')會給出-1。你也遇到了浮動 - >雙倍晉升時通過。 – user7116