c++作为c的超集,除了引入了class类型外,其基本数据类型和c基本一致:
各种基本数据类型的大小、范围和精度如下:
类型 | 大小(字节) | 范围 | 精度 |
---|---|---|---|
char | 1 | -128 ~ +127 | 1 |
unsigned char | 1 | 0 ~ 255 | 1 |
short | 2 | -32767 ~ + 32768 | 1 |
unsigned short | 2 | 0 ~ 65536 | 1 |
int | 4 | -2147483648 ~ +2147483647 | 1 |
unsigned int | 4 | 0 ~ 4294967295 | 1 |
long | 4 | -2147483648 ~ +2147483647 | 1 |
unsigned long | 4 | 0 ~ 4294967295 | 1 |
long long | 8 | -9223372036854775808 ~ +9223372036854775807 | 1 |
unsigned long long | 8 | 0 ~ 1844674407370955161 | 1 |
float | 4 | -3.40e38 ~ +3.40e38 | 1e-7 |
double | 8 | -1.79e308 ~ +1.79e308 | 1e-16 |
note
- 以上数据类型的大小和精度定义在climits和limits文件中;
- long在32位系统下大小为4字节,在64位系统下大小为8字节。其他数据类型的大小一样;
- scanf中%f代表float, %lf代表double;printf中%f和%lf都可以代表float和double,因为float和double都会被转换成8字节的double。可以使用%m.nf控制float或者double的输入\输出精度。long long的格式控制符为%lld;
- float和double的字节分布如下:
类型 | 符号位(bits) | 指数位(bits) | 尾数位(bits) |
---|---|---|---|
float | 1 | 8 | 23 |
double | 1 | 11 | 52 |
float和double的计算方式为:1.尾数*2^(指数位-1)