1.各个数据类型占用字节大小
#include<iostream>
using namespace std;
int main(){
cout<<sizeof(char)<<endl; //1个字节,-128~+127 -2^7~2^7-1
cout<<sizeof(short)<<endl; //2个字节,-32768~32767 -2^15~2^15-1
cout<<sizeof(int)<<endl; //4个字节,-2147483648~2147483647 大概21亿左右, -2^31~2^31-1
cout<<sizeof(long)<<endl; //32位的为4个字节,用g++编译器会变成8个字节
cout<<sizeof(float)<<endl; //4个字节
cout<<sizeof(double)<<endl; //8个字节
cout<<sizeof(long long)<<endl; //8个字节
cout<<sizeof(__int64)<<endl; //8个字节
cout<<sizeof(__int128)<<endl; //16个字节
return 0;
}
2.float和double能表示数的范围大小和精度
###范围
-
单精度浮点数
注:由于指数采用移码存储,全部为正数,表示范围的大小为0~255,所以存储的时候需要在实际指数的基础上加上127(不加128的原因可以网上参考下,可以理解为一种规定),因此在这里浮点数指数实际范围大小为==-127 ~ +128==,很多人容易与补码搞混以为指数表示范围是==-128~+127==,这点需要注意下。 -
双精度浮点数
表示与单精度浮点数基本类似,s(符号位),e(指数位),f(尾数位数)分别为1,11,52位。
float的范围为==-2^128 ~ +2^128==,也即3.40E+38 ~ +3.40E+38;double的范围为==-2^1024 ~ +2^1024==,也即==-1.79E+308 ~ +1.79E+308==。
###精度
float和double的精度由尾数的位数决定,float尾数为23位,能表示的大小为2^23=8388608,共七位,因此能表示
的精度为6 ~ 7位有效数字。同理double能表示的精度为15 ~16位有效数字。
[对于浮点数指数表示范围为-127~+128不清楚的可以参考下这里]
https://blog.csdn.net/abcdu1/article/details/75095781
https://blog.csdn.net/i6223671/article/details/88312191
https://blog.csdn.net/shenziheng1/article/details/79471340