一、数据类型
char //字符数据类型
short //短整型
int //整型
long //长整型
long long //更长的整型
float //单精度浮点数
double //双精度浮点数
以上七种数据类型可以分为两类
1.整型家族(char、short、int、long、long long)
2.浮点型家族(float、double)
二、整数在内存中的存储
2.1、原码、反码、补码
计算机中的整数有三种2进制表示方法,即原码、反码和补码。
三种表示方法均有符号位和数值位两部分,符号位都是用0表示“正”,用1表示“负”,而
正数的原、反、补码都相同。
负整数的三种表示方法各不相同。
**原码:正负形式直接写出二进制序列
反码:原码符号位不变,其他位按位取反
补码:反码加一**
eg. b=-10
二进制表示
1000 0000 0000 0000 0000 0000 0000 1010 ->原码
1111 1111 1111 1111 1111 1111 1111 0101 ->反码
1111 1111 1111 1111 1111 1111 1111 0110 ->补码
十六进制表示
0x 80 00 00 0a ->原码
0x ff ff ff f5 ->反码
0x ff ff ff f6 ->补码
知识点1. 整数家族在内存中存补码,且倒着存(VS环境下,为小端字节序存储)
why.更方便计算,CPU只有加法器,存补码运算时可以直接用补码相加。
知识点2. 原码->补码:取反加一
补码->原码:取反加一
知识点3. 整型家族都可分为 signed 和 unsigned
知识点4. signed 整型存储时第一位为符号位,不是有效位
unsigned整型存储时第一位为有效位,没有符号
2.2、大小端
**大端字节序存储、小端字节序存储**
大端字节序存储:把一个数的高位字节序放在低地址
小端字节序存储:把一个数的高位字节序放在高地址
eg. 0x 11 22 33 44
高位 低位
三、浮点数在内存中的存储
3.1存
浮点数都可以写为
**V=(-1)^S * M * 2^E**
eg. 5.0f ----->101.0 ----->(-1)^0 * 1.01 * 2^2
9.5f ----->1001.1 ----->(-1)^0 * 1.0011 * 2^3
9.6f ----->无法精确用二进制表示,因此无法精确保存
**存储时是对S、M、E进行存储**
1.因为M是1到2的一个数,小数点前一定会有一个1,所以不用存这个1
2.对于指数E,存储时要加上127(32位)或者1023(86位),再转为二进制
why.为了方便存储负指数
3.2取
浮点数从内存中取出,要根据 E 分为三种情况
1.E不全为1或者不全位0
此时就按照存入的相反操作取出就行
2.E全为1,则此浮点数无穷大
3.E全为0,则此浮点数无穷小,为0