一、整数在内存中的存储
整数的二进制表示方法有三种:原码、反码、补码
有符号的整数,最高位为符号位,其他位为数值位,符号位为0表示为正数,符号位为1表示负数。
正整数的原码、反码和补码相同,而负整数的反码为将原码的符号位不变,其余位按位取反,补码为反码加1。
对于整数来说,数据存放内存中存放的为补码。
二、浮点数的存储
相信大家遇见过浮点数小数位部分丢失的情况。这是因为浮点数在内存中的存储方式与整数不同。根据国际标准IEEE754,任意一个二进制浮点数可表示为下面的形式。
这就意味着,浮点数的存储,实际上存储的是S M E三个数。
按规定,32位浮点数最高一位存储S,接下来的八位存储E,剩下的23位存储M
64位浮点数最高一位存储符号S,接下来的11位存储E,剩下的52位存储M
而浮点数取出来的情况还有三种:
第一种:E不全为零或E不全为一,则浮点数将E减去127(1023),得到真实值,再将有效数字M前加上第一位的1.
第二种:E全为零 有效数字M不再加上第一位的1,而是还原为0.xxxx的小数。
第三种:E全为1,如果有效数字M全为0,则表示无穷大或无穷小。
三、大小端字节序
⼤端:
是指数据的低位字节内容保存在内存的⾼地址处,⽽数据的⾼位字节内容,保存在内存的低地址处。
⼩端:
是指数据的低位字节内容保存在内存的低地址处,⽽数据的⾼位字节内容,保存在内存的⾼地址处。
我们可以写一个简单的程序来判断大小端:
#include<stdio.h>
union byte {
char c;
int n;
}a;
int main()
{
a.n = 1;
if (a.c == 1)
printf("小端存储");
else
printf("大端存储");
return 0;
}
以上就是本篇博客全部内容,如果这篇博客对你有帮助的话,请点赞收藏关注哦!