1:数据类型介绍
2: 整形在内存中的存储
整数的2进制表示有三种表示
- 正的整数的原码,反码,补码都相同
- 负的整数:
原码:直接将数值按照正负数的形式翻译成二进制就可以得到原码。
反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。
补码:反码+1就得到补码。
对于整形来说:数据存放内存中其实存放的是补码。
为什么呢?
计算机系统中,数值一律用补码来表示和存储
使用补码,可以将符号位和数值域统
一处理(CPU只有加法器);
原码相互转化运算逻辑相同
3大小端介绍
大端(字节序)(存储)模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;
小端(字节序)(存储)模式:是指数据的低位保存在内存的低地址中,而数据的高位,,保存在内存的高地址中。
有些ARM处理器还可以由硬件来选择是大端模式
还是小端模式。(VS就是小端存储)
(内存中实际还是二进制存储)
4 浮点数存储规则
这是为什么呢?
第一个*pFloat的值是因为,存入的时候是以整形的方式存,而取出时的方式是float方式,所以结果不一样
下面的错误同理。
重点:以什么形式方放进去就要以什么形式拿出来,否者就会得到一个不一样的值
根据国际标准IEEE(电气和电子工程协会) 754,任意一个二进制浮点数V可以表示成下面的形式:
V = (-1)^S * M * 2^E(类比十进制的科学计数法)
(-1)^S表示符号位,当S=0,V为正数;当S=1,V为负数。
M表示有效数字,大于等于1,小于2。
2^E表示指数位。
32位:
第一位:保存S
第二到九位保存E+127,
剩余二十三位保存M小数点后面的数,不够23位,后面补零
特例:
E全为0,表示无穷小活正负(E=1-127)
E全为1,表示无穷大
举例如下:
为什么 0x00000009 还原成浮点数,就成了 0.000000 ?
首先,将 0x00000009 拆分,得到第一位符号位s=0,后面8位的指数 E=00000000 ,
最后23位的有效数字M=000 0000 0000 0000 0000 1001。
由于指数E全为0,所以符合上一节的第二种情况。因此,浮点数V就写成:
V=(-1)^0 × 0.00000000000000000001001×2^(-126)=1.001×2^(-146)
显然,V是一个很小的接近于0的正数,所以用十进制小数表示就是0.000000。
再看例题的第二部分。
请问浮点数9.0,如何用二进制表示?还原成十进制又是多少?
首先,浮点数9.0等于二进制的1001.0,即1.001×2^3。
那么,第一位的符号位s=0,有效数字M等于001后面再加20个0,凑满23位,指数E等于3+127=130,
即10000010。
所以,写成二进制形式,应该是s+E+M,即
这个32位的二进制数,还原成十进制,正是 1091567616 。