数据
四种数据类型:整型、浮点型、指针、结构体
q:为什么要设计不同的数据类型?
a:我们需要数据进行存储和运算,如果各种数据都用相同的方法进行存储,很可能造成极大的空间浪费。比如说一个比较小的整数,用1个字节就能存储,你不加区分的用最大的8个字节去存储,那就浪费了7倍资源。所以对数据类型极性区分,是为了在有限资源中进行高效的存储和运算。
基本数据类型
整型
基础的有以下四种类型:
- 字符 char
- 短整型 short 或者写成 short int
- 整型 int
- 长整型 long 或者写成 long int
但是对于这四种类型,又有 singed和unsinged两种修饰,前者表示有符号可以表示负数,后者没符号表示非负数。
范围如下:
类型 | 字节 | 位数 | 范围 |
---|---|---|---|
char | 1个字节 | 8 | 0 ~ 127 |
singed char | 1个字节 | 8 | -127 ~ 127 |
unsinged char | 1个字节 | 8 | 0 ~ 255 |
short | 2个字节 | 16 | -32767 ~ 32767 |
unsinged short | 2个字节 | 16 | 0 ~ 65535 |
int | 一般4个字节 | 32 | -2147483647 ~ 2147483647 |
unsigned int | 一般4个字节 | 32 | 0 ~ 4294967295 |
long | 一般也是4个字节 | 32 | -2147483647 ~ 2147483647 |
unsinged long | 一般也是4个字节 | 32 | 0 ~ 4294967295 |
long long | 8个字节 | 64 | -2^64+1 ~ 2^64-1 |
表示方法:
十进制的跟以前一样 24
八进制的在前面加0 024
十六进制的前面加0x 0x24
注:表示范围跟编译器有关,int有时可以是16位,也可以是32位。但是有一个原则:short最多跟int一样长,long最少跟int一样长
浮点类型
存储小数用的。有三种类型:float、double、long double。
浮点数的存储,以32位的float为例:
任何浮点数都可以转换成 ( − 1 ) S ∗ ( 1 + M 2 23 ) ∗ 2 E − 127 (-1)^S * (1+\frac{M}{2^{23}}) * 2^{E-127} (−1)S∗(1+223M)∗2E−127形式,所以存储的时候需要这三个数字属性。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X9EW3evp-1623377275274)(浮点数存储.png)]
第一段,S表示符号,正负。1个bit。0表示正数,1表示负数。
第二段,E表示指数,8个bit。之所以要-127,是因为考虑到指数可以是负数,所以取一半表示负数。
第三段,M表示小数部分,23个bit。
类型 | 字节 | 位数 |
---|---|---|
float | 4 | 32 |
double | 8 | 64 |
long double | 16 | 128 |
现在的问题就是怎么把小数部分转换成二进制的M
整数可以写成 a ∗ 2 0