int,double,char,float,空指针,分别是几个字节
和机器字长及编译器有关:
| 数据类型 | 32位编译器 | 64位编译器 | 取值范围 |
|---|---|---|---|
| bool | 1 | 1 | true,false |
| byte | 1 | 1 | -128 ~ 127 |
| char | 1 | 1 | -128 ~ 127 |
| unsigned char | 1 | 1 | 0 ~ 255 |
| short | 2 | 2 | -2^15 ~ 2^15-1 |
| unsigned short | 2 | 2 | 0 ~ 2^16-1 |
| int | 4 | 4 | -2^31 ~ 2^31-1 |
| unsigned int | 4 | 4 | 0 ~ 2^32-1 |
| long | 4 | 8 | 二者不同 |
| unsigned long | 4 | 8 | 二者不同 |
| long long | 8 | 8 | -2^63 ~ 2^63-1 |
| float | 4 | 4 | 范围-3.4**10^38 ~ 3.4* *10^38-1 精度为6~7位有效数字 |
| double | 8 | 8 | 范围-1.7**10^308 ~ 1.7 *10^308-1 精度为15~16位 |
| long double | 12 | ||
| * | 4 | 8 | 二者不同 |
| string | 24 |
整型:表示整数、字符和布尔值的算术类型合称为整型(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和字符串类型string。string是c++提供的一个类,而不是基本类型。要使用string类,必须在程序中添加头文件string。