整型变量
整型变量在内存中是以二进制补码的形式存储的,正数的补码与原码相同,负数的补码是其绝对值的二进制取反加1,不同的机器不同的编译系统为整型分配的位数也不同.
浮点型存储(这个以前一直不知道)
符号位 | 指数位 | 小数部 | 指数偏移 |
单精度 | 1(31) | 8(30-23) | 127 |
双精度 | 1(63) | 11(62-52) | 1023 |
存储是是按规范化形式,即小数点前只有一位非0的数,即最高位永远为1,所以存储时只有小数部,没有整数部.
指数部分 占用8-bit的二进制数,可表示数值范围为0-255。 但是指数应可正可负,所以IEEE规定,此处算出的次方须减去127才是真正的指数。所以float的指数可从 -126到128.而我们算内存中存储的指数时算出的指数也需要先加上127再变成二进制
因此0.75二进制存储为00111111 01000000 00000000 00000000
整型和浮点型存储都是低位占低位高位在高位
字符存储
内存中存储的是字符的ASCII码,字符存储是高位在低位,低位在高位
结构体所占空间问题
结构体的存储与成员类型、成员数量、成员的定义的顺序有关,而且还存在对齐的问题,在vc下默认的对齐方式是自然对齐,即以结构体成员中size最大的成员作为基本分配单元。即总的结构体的大小必须为其倍数。在分配时Char
偏移量必须为sizeof(char)即1的倍数
int
偏移量必须为sizeof(int)即4的倍数
float
偏移量必须为sizeof(float)即4的倍数
double
偏移量必须为sizeof(double)即8的倍数
Short
偏移量必须为sizeof(short)即2的倍数
若想改变这种情况则可加上#pragma pack(n)