面试_c++_基本数据类型的大小和表示范围

416 阅读2分钟

int,double,char,float,空指针,分别是几个字节

和机器字长及编译器有关:

数据类型32位编译器64位编译器取值范围
bool11true,false
byte11-128 ~ 127
char11-128 ~ 127
unsigned char110 ~ 255
short22-2^15 ~ 2^15-1
unsigned short220 ~ 2^16-1
int44-2^31 ~ 2^31-1
unsigned int440 ~ 2^32-1
long48二者不同
unsigned long48二者不同
long long88-2^63 ~ 2^63-1
float44范围-3.4**10^38 ~ 3.4* *10^38-1
精度为6~7位有效数字
double88范围-1.7**10^308 ~ 1.7 *10^308-1
精度为15~16位
long double12
*48二者不同
string24

整型:表示整数、字符和布尔值的算术类型合称为整型(integral type)


关于long double:80位是是C语言,ANSI/ISO标准规定的,128位出自谭浩强的书,具体位数的话取决于具体的平台 ,比如GNU g++里的“long double”,是96位。VC是64位等等


关于指针:1.指针(指针变量)也是变量,是存储地址的变量。即:指针里装的是地址

​ 2.指针占4字节(空指针也是4字节,只是里面的地址值是 0而已)(地址没有大小一说)


float与double的范围和精度

范围 float和double的范围是由指数的位数来决定的。 float的指数位有8位,而double的指数位有11位,分布如下:

float: 1bit(符号位) 8bits(指数位) 23bits(尾数位) double: 1bit(符号位) 11bits(指数位) 52bits(尾数位)

于是,float的指数范围为-127~+128,而double的指数范围为-1023~+1024。

float的范围为-2^128 ~ +2^128,也即-3.40E+38 ~ +3.40E+38;

double的范围为-2^1024 ~ +2^1024,也即-1.79E+308 ~ +1.79E+308。

精度 float和double的精度是由尾数的位数来决定的。浮点数在内存中是按科学计数法来存储的,其整数部分始终是一个隐含着的“1”,由于它是不变的,故不能对精度造成影响。 float:2^23 = 8388608,一共七位,这意味着最多能有7位有效数字,但绝对能保证的为6位,也即float的精度为67位有效数字; double:2^52 = 4503599627370496,一共16位,同理,double的精度为1516位。


c++相较于c,多了枚举类型enum字符串类型stringstring是c++提供的一个类,而不是基本类型。要使用string类,必须在程序中添加头文件string。