- 数据的类型分类
- 整型的储存
- 大端与小端字节序
- 浮点型在内存中的存储
1.数据的类型分类
整型家族:
- char 1字节
- short 2字节
- int 4字节
- long 4/8字节
- long long 8字节
char---------1.unsigned char
2.signed char (编译器上默认的char是不是signed是取决于编译器的)
short--------1.unsigned short (int)
2.signed short (int)
int-----------1.unsigned int
2.signed int(int 类型默认有字符)
long---------1.unsigned long (int)
2.signed long (int)
浮点型家族:
float----------4字节
double------8字节
构造类型(自定义类型):
- 数组类型
- 结构体类型
- 枚举类型
- 联合类型
- 指针类型
- 空类型
数组类型中:int[10]是数组类型
指针类型:int*pf;
char*pc;
float*pf;
void*pv;
空类型:void表示空类型(无类型)
通常应用于函数的返回类型,函数的参数,指针。
2.整型的储存:整数的二进制表示形式:原反补三种表示方法均有符号位和数值位
原码:第一位为符号位剩下的按整型的二进制的形式写出
反码:符号位不变,其余位按位取反
补码:反码加1.
为什么整型的储存是用补码的二进制进行储存?
解:是用补码,可以将符号位和数值位进行统一处理。
加法减法也可进行统一处理(cpu只有加法器)此外,补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
3.大端与小端字节序
字节序(字节储存的顺序)
大端字节序:把一个数据的低字节的数放在高地指出,高字节的数据放在低地址处。
小端字节序:把一个数据的低字节的数放在低地址处,高字节的数据放在高地址处。
我的理解
大端字节序:大(高)字节从低地址按顺序放入
小端字节序:小(低)字节从低地址按顺序放入
制作一个程序判断大小端
4.浮点型在内存中的存储
这个程序说明了浮点型的储存处和整型的存储方式的规则不一样
IEE754规则 任意一个浮点数V科表示:
(-1)^S*M*2^E
(-1)^S表示符号位,当S=0时,V为正数;当S=1时,V为负数。
M表示有效数字,大于等于1,小于2
2^E表示指数位。
十进制5.5------>101.1-------->1.011*2^2--------->S=0,M=1.011,E=2
float(32位浮点型)
最高一位是符号位S,接着八位是指数E,剩下的23位为有效数字M
double (64位的浮点型)
对于64位的浮点数,最高的1位是符号位S,接着的11位为指数位E,剩下的52位为有效数字M
IEE754中M固定为1.xxxx(XXXX)为小数部分,所以可以省略1只保留小数点后面几位。
浮点数不能精确保存:
- 5.3------->101.0101…………达到M最大限度后也无法保存
- E规定为一个无符号整数,意味着E为8位取值范围为0-255;E为11位,取值范围为0-2047
科学计数法中E可以是负数的,所以IEE754中规定,存入内存中须加上一个中间值。对于8位E来说:中间值为127,对于11位E来说,这个中间值为1023。
比如:八位的E来说-1存放为127+(-1)=126
10存放为127+ 10 =137
十一位来说-1存放为1023+(-1)=1022
10存放为1023+ 10 =1033
E从内存中取出有三种方法
1.E不为全0或者全1
按照规则指数E计算出值减127(或1023),得到真实值,再将有效数字M前加上第一位
2.E为全0
浮点数指数E等于-127(或-1023)即真实值。
有效数字M前不加上1而是为0.xxxxx的小数(为了不表示正负0)以及接近于0的很小的数字。
指数为-127已经表示很小的数字了。
3.E为全1
此时表示一个非常大的数字。表示正负务求大。
因此回头看:
补充:
有字符和无字符char的存储
附笔记: