整数在内存中的存储
学习了操作符之后,我们知道整数2进制有三种表示方法:原码,反码,补码
有符号整数:三种表示方法均有符号位和整数位,符号位用0表示正,最高位为符号位
正整数原反补码均相同
负整数:数值按二进制翻译即为原码,原码符号位不变,其他按位取反就是反码,反码加一为补码
整形:数据存放在内存的是是补码(使用补码可以将符号位和数值域统一处理)
大小端字节序和字节序的判断
概念
大小端:超过一个字节的数据在内存存储的时候,就有存储顺序的问题,按照不同的存储顺序,我们分为大端字节序存储和小段字节序存储
大端字节序:高位存在低地址中
小端字节序:高位存在高地址中
常用的x86--->小段模式 KEIL C51大端模式
很多ARM DSP都为小端模式
判断
分析
int a=1; ox00000001
大端 (低地址)00000001(高地址)
小端 (高地址)01000000(低地址)
取a
地址,强转为char,比较第一个字节内容大小即可
int check_sys()
{
int a=1;
return (*(char*)&a);
}
浮点数在内存中的存储
常见的浮点数 3.14159,1E10
浮点数家族:float,doouble,long double
浮点数存储方式和 整数存储的方式不同,任意二进制浮点数v可以表示成下面的形式
v=(-1)^s*M*2^E
(-1)^s表示符号位 当s=0 v为正数,当s=1,v为负数
M表示有效数字 1<=M<2
2^E表示指数位
eg: 十进制9.5 二进制(-1)^0*1.0011*2^3
规定
对于32位的浮点数,最高位存s,接着8位存E,剩下的23位存M
对于64位的浮点数,最高位存s,接着11位存E,剩下的52位存M
浮点数存的过程
规定:存入内存时E的真实值必须加上一个中间数,对于8位的E ,中间数是127,对于11位的E,中间数是1023
浮点数取的过程
1.E不全为0或1(常见的情况)
E减去127(1023)得到真实值,再将有效数字M前加上第一位的1
2.E全为0
E=-126 即为真实值
此时M不再加1 ,此时的数为无穷小
3.E全为1
表示无穷大