目录
一、整数在内存中的存储
整数的二进制表示方法有 原码、反码、补码 三种类型。
正数 原、反、补码 三种都相同。
在计算机系统中,数据一律用 补码 来表示和存储。
原因:使用补码,可以将符号位和数值域统一处理;
加减法可以统一处理(CPU只有加法器),补码原码相互转换,运算过程相同,无需额外硬件 电路。
二、大小端字节序和字节序判断
1. 什么是大小端
对vs,地址从低到高;数据从高到低(从左 -> 右)
1.1 大端模式
数据低位字节内容保存在内存高地址处,数据高位字节内容保存在内存低地址处(vs看,正序)
1.2 小端模式
数据低位字节内容保存在内存低地址处,数据高位字节内容保存在内存高地址处(vs看,倒序)
2. 模拟实现
#include<stdio.h>
//写一个函数判断当前机器是大端还是小端,如果是小端返回1,如果是大端返回0
int check_sys()
{
int i = 1;
return(*(char*)&i);
}
int main()
{
if (check_sys() == 1)
printf("小端\n");
else
printf("大端\n");
return 0;
}
//&i -- 得到的是i的四个字节中,地址较小的那个字节的地址
//确定较小字节处内容即可知道存储模式
三、浮点数在内存中的存储
1. 浮点数存储
1.1 格式
1.2 浮点数存的过程
对于32位浮点数,最高1位存储符号位S,接着8位存储指数E,剩下23位存储有效数字M
对于64位浮点数,最高1位存储符号位S,接着11位存储指数E,剩下52位存储有效数字M
有1<M<2,M为1.xxxxx的数。规定:计算机保存M时,舍去第一位1.只保留.xxxxx部分,等到读取时,再把第一位的1加上去。目的在于节省一位有效数字。
对E来说:E为无符号整数,但科学记数法中E可以出现负数,所以存入内存时,E的真实值需加上一个中间数(对8位E,中间数为127;11位为1023)
1.3 浮点数读取过程
指数E从内存中取出分为三种情况:
1.3.1 E不全为0或不全为1
指数E的计算值减去127(1023),得到真实值,再将有效数字M前加上第一位的1
1.3.2 E全为0
指数E等于1-127(或者1-1023)即为真实值,有效数字M不再加上第一位的1
1.3.3 E全为1
此时,如果有效数字M全为0,表示无穷大(正负取决于符号位S)