- 数据类型
1.整型
(1)short
(2)int
(3)long
(4)long long
(5)char
2.浮点型
(1)float
(2)double
3.构造类型:
(1)数组类型
(2)结构体类型
(3)枚举类型
(4)联合类型
4.指针类型
(1)整形指针
(2)浮点型指针
(3)函数指针
(4)数组指针
(5)构造类型指针
..........
(6)void型指针(可以指向任意类型)
5.空类型:
void 表示空类型
- 整型在内存的存储
(1)原码反码补码
正数的原反补码相同
负数的原反补码各不相同
如下:
int在32位的编译器中-1的存储方式
10000000000000000000000000000001//原码(第一个1表示符号位,表示负数)
11111111111111111111111111111110//反码(第一个1是符号位不变,剩下的1变0,0变1)
11111111111111111111111111111111//补码(反码加1)
举例: int在32位的编译器中-10的存储方式
10000000000000000000000000001010
11111111111111111111111111110101
11111111111111111111111111110110
这里是32个比特位,在内存中以16进制显示,一个16进制占4个比特位,32个比特位也就是8个16进制位
1111 1111 1111 1111 1111 1111 1111 0110
f f f f f f f 6
ff ff ff f6
![](https://img-blog.csdnimg.cn/img_convert/efbc3174f8838638591680dacb97cecf.png)
这里的计算顺序与箭头指向的内存顺序不同,但了解大小端之后你就会有所明白
(2)大小端的介绍
小端(存储)模式
是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。
大端(存储)模式
是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
注意:这是小端存储在调试内存中以16进制来显示(0x表示16进制),
0x006FF714表示一个字节,不要因为是小段存储误以为这个字节存储方式是10,
![](https://img-blog.csdnimg.cn/img_convert/f503cc0f4ef78ab86eaf4a1e0a9a16f0.png)
![](https://img-blog.csdnimg.cn/img_convert/54bfdf65757aada0b7d04dfda493afba.png)
- 浮点型在内存的存储
浮点型与整数型不同
根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:
(-1)^S * M * 2^E
(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。
M表示有效数字,大于等于1,小于2。
2^E表示指数位。
S与E
S代表这个数是否为正负:(-1)^s这里的S表示正数为0表示负数为1
在内存中在32(1+8+23)位的浮点数:这里的E是((-1)^S * M * 2^E中的E加上127的结果)
![](https://img-blog.csdnimg.cn/img_convert/389775660919aeec5b06259de92b9828.png)
在内存的64(1+11+52)位的浮点数:这里的E是((-1)^S * M * 2^E中的E加上1023的结果)
这里的E为
![](https://img-blog.csdnimg.cn/img_convert/f02862d8aac2ff8add71d4d616b3ccb3.png)
M
M与E息息相关有三种情况
E不全等于0且不全等于1
(这里的E是指加上127之后的E)
举例:
float a=9.0转成二进制为
1001.0
=(-1)^ 0 * 1.001 * 2 ^ 3
S=0 M=1.001 E=3
0 1000 0010 00100000000000000000000
在内存中 这里的 M是去除小数点之前的1--->.001,将第一位的1舍去以后,等于M可以保存24位有效数字
![](https://img-blog.csdnimg.cn/img_convert/d027d23a4b2fd207375b75ad42cdffdd.png)
E全等于0
有效数字M不再加上第一位的1,而是还原为0.xxxxxx的小数,接近于0的很小的数字。
这时,浮点数的指数E等于1-127(或者1-1023)
举例如下:
int a =9(这是整数9以浮点型存储方式)
0 00000000 000000000000000000010001
S=0 M=0.000000000000000000010001 E=-126
(-1)^S*0.000000000000000000010001 *2^-126
![](https://img-blog.csdnimg.cn/img_convert/7c7f28f56d7c297cdc936909fcca9a6a.png)
E全等于1
有效数字M全为0表示无限大