##数据在内存中的存储
···
Debug版本下
···
Release版本下
由调试结果可以看出,Realse版本下会对代码进行优化,i的地址位于数组地址的地位,并且紧挨数组元素存储。
···
数据类型分为:
1.内置类型
几种基本的内置类型
占内存空间大小(单位:字节)
char 字符数据类型 1个字节
short 短整型 2
int 整形 4
long 长整型 4
long long 更长整形 8
float 单精度浮点数 4
double 双精度浮点数 8
2.自定义类型
构造类型:
数组类型
结构体类型struct
枚举类型 enum
联合类型union
···
整数在内存中的存储,最高位表示符号位:最高位0表示整数,最高位1表示负数
原码表示方式:直接将数表示位二进制的形式
反码:原码的符号位不变,其他位依次按位取反
补码:反码加1
signed表示有符号的,unsigned表示无符号的
正数的原、反、补码都相同
对于整形来说:数据存放内存中其实存放的是补码
unsigned int i;则i恒大于0;则程序结果为死循环
strlen是统计字符串的长度,遇到’\0’结束,’\0’的ASCII值是0;
当a下标为255时数组元素内容是’\0’;
-1
原码:1000 0000 0000 0000 0000 0000 0000 0001
反码:1111 1111 1111 1111 1111 1111 1111 1110
补码 1111 1111 1111 1111 1111 1111 1111 1111
-255
原码:1000 0000 0000 0000 0000 0000 1111 1111
反码: 1111 1111 1111 1111 1111 1111 0000 0000
补码: 1111 1111 1111 1111 1111 1111 0000 0001
(-1)+(-255)
a为char,则i为255时,-1-i=>’\0’
1111 1111
0000 0001
unsigned char i;i的范围为0-255,i<=-255恒成立,因此程序死循环打印"hello world"
字节序问题
大端字节序:数据低位保存在内存的高地址,高位保存在内存的低地址上
小端字节序:数据低位保存在内存的低地址,高位保存在内存的高地址上
一台机器大端还是小端,取决于具体的cpu
判断字节序代码:
浮点数在内存中的存储
blog.csdnimg.cn/2020092911005795.png#pic_center)
表示符号位,当s=0时,v为正数,s=1时,v为负数
M表示有效数字
E表示指数
对于32位浮点数,最高位是符号位S,接着8位是指数E,剩下32位是有效数字M;
对于64位浮点数,最高位是符号位S,接着11位是指数E,剩下52位是有效数字M;
M是大于等于1小于等于2的,可以写为1.xxxxxxx;M在保存时,只保存小数点后面的部分;
E不全为0或不全为1时:
E为8位时,E+127;
E为11位时,E+1023;
E全为0时,
E为8位时,E-127;
E为11位时,E-1023;
E全为1时
M全为0;表示加减无穷大;