int和long都是用32位来存储最大值和最小值分别2147483647(109), -2147483648;
long long 是用64位来存储最大值和最小值分别为9223372036854775807(1018),-9223372036854775808;
float的最大值和最小值分别为3.40282e+038(1038),1.17549e-038(10-38);
double的最大值和最小值分别为1.79769e+308(10308),2.22507e-308(10-308)。
根据组成原理中的内容,其中int和long采用补码存储,231-1即为最大能表示的范围,long long类型同理,c++中64位可用 __int64来定义。
float 和 double两种类型的存储遵循IEEE-754
符号位 | 阶码 | 尾数 |
其中符号位表示正负,并与尾数隔开;阶码则用移码来表示(移码相当于真值加上一个常数7FH,3FFH等);尾数部分规格化来表示,即非“0”的有效位最高位总是“1”,再IEEE中此1省略。
经过计算,我们可知double最大值确实可以到10308,尽管精度可能非常小