
◆ 博主名称: 小此方-CSDN博客
大家好,欢迎来到小此方的博客。
🔥个人专栏:《C语言》_小此方的博客-CSDN博客
🔥 努力成就未来,代码改变世界,相信我有一天也能成为改变世界的那个人
➤整数的二进制表示方法有三种:即原码;反码;补码。
有符号整数的三种表示方法均有符号位和数值位两部分:在二进制序列中,最高位的一位被当作符号位,其余各位属于数值位。
➤ 符号位的表示规则:
◆ 0:表示正。
◆ 1:表示负(注意这里有点反着来的感觉,不要记错了)
➤ 小总结:
◆ 正整数(无符号数)的原码反码和补码相同。
◆ 负整数(有符号数)的原码反码补码各不相同。
➤三条规则
◆ 原码:直接将数值按照正负数的形式翻译成二进制得到的就是原码。 ◆ 反码:将原码的符号位不变,其他位依次按位取反就可以得到反码。 ◆ 补码:反码+1就得到补码。(补码得到原码也是可以使用:取反,+1的操作。)
➤一图流

➤存储形式
◆ 原码是人类可以看懂的形式。
◆ 补码是机器存储的形式。
➤原因
◆ 使用补码,可以将符号位和数值域统⼀处理;
◆ 加法和减法也可以统⼀处理(CPU只有加法器)
◆ 补码与原码相互转换,其运算过程是相同的,不需要额外的硬件电路。
#include <stdio.h>
int main()
{
int a = 0x11223344;
return 0;
}开启调试:如图(此图借用比特就业公司)

我们发现0x11223344在内存中是倒着存放的:原因是什么?
当需要存储的数据超过⼀个字节时,会存在存储顺序问题,按照不同的存储顺序,我们分为大端字节序存储和小端字节序存储:
➤ 大端存储模式
是指数据的低位字节内容保存在内存的高地址处,而数据的高位字节内容,保存在内存的低地址处。
➤ 小端存储模式
是指数据的低位字节内容保存在内存的低地址处,而数据的高位字节内容,保存在内存的高地址处。
➤一图流

这个术语据说源于《格列佛游记》。在小说中,小人国内部分裂为“大端派”(从大头敲破鸡蛋)和“小端派”(从小头敲破鸡蛋)。计算机科学家们幽默地借用了这个典故。(doge)
核心是计算机设计早期,不同的芯片制造商在如何处理多字节数据在内存中的存储顺序上,做出了不同的、但各自合理的决定。这背后没有统一的标准,导致了延续至今的分歧。 在如今计算机系统中,我们以字节为单位的,每个地址单元都对应着⼀个字节,一个字节为8 bit 位,但是在C语言中除了8bit的char 之外,还有16bit的short 型,32bit的long 型(要看具体的编译器),另外,对于位数⼤于8位的处理器,例如16位或者32位的处理器,由于寄存器宽度大于⼀个字节,那么必然存在着⼀个如何将多个字节安排的问题。因此就导致了大端存储模式和小端存储模式。
➤ 科学计数法:(例)1E10(表示1的是次幂)。
➤ 类型汇总: float 、 double 、 long doubl。
➤ 浮点数表示的范围:<float.h> 中定义。
➤国际标准 根据国际标准IEEE(电气和电子工程协会)754,任意一个二进制浮点数V可以表示成

➤解读
◆

表示符号位,当S=0,V为正数;当S=1,V为负数。 ◆ M表示有效数字,M大于等于1,小于2。 ◆

表示指数位。
➤举例
例一:十进制5.0 (转化为二进制)------> 二进制101.0 (科学计数法表示)-------->1.01*2^2 【S=0;M=1.01;E=2】 例二:十进制-5.0 (转化为二进制)------> 二进制-101.0 (科学计数法表示)-------->-1.01*2^2 【S=1;M=1.01;E=2】
➤ IEE754规定
◆ 对于32位的浮点数,最高的1位存储符号位S,接着的8位存储指数E,剩下的23位存储有效数
字M。
◆ 对于64位的浮点数,最高的1位存储符号位S,接着的11位存储指数E,剩下的52位存储有效数字M。
➤ 一图流(图片借自比特就业公司)

➤ IEE754对有效数字M的特殊规定
◆ 组成:M二进制浮点数由整数部分+小数部分组成(如:101.101整数部分是101,小数部分是0.101)
◆ 操作:存储时,因为[M]=1,所以默认M第一位为1,被舍去,保留小数部分。
◆ 目的:节省一位有效数字,以32位浮点数为例,留给M的空间有23位,将第一位的1舍去后,等于可以保存24位有效数字。
➤ IEE754对指数E的特殊规定
◆ 结论:E在存入时要加上一个中间数字,对8位的E这个中间数是127;对于11位的E这个数字是1023。
◆ 原理:
1,为什么要有中间数字:存入的E是一个无符号整数,科学计数法的E是一个有符号数字,如何统一两者?————加一个中间数字再存储。
2,为什么是127(1023):存入的E为8位,是无符号整数,取值范围为0~255;E为11位,取值范围为0~2047;
科学计数法E为8位时,有符号整数整数,取值范围是[-128,127];11位时,取值范围是[-1024,1023]。不需解释,硬性规定。
➤ 情况一:E不全为0或1
◆ 规则:E计算值减去127(或1023),得到真实值,再将有效数字M前面加上1。
◆ 举例:0.5(十进制)的二进制形式为0.1,规定正部分部分必须为1,将小数点向右移动一位:1.0*2^(-1),E=-1,-1+127=126,表示:01111110,有效数字M去掉整数位上的1后为0,补齐到23位,结果:
0 01111110 0000000000000000000000
➤情况二:E全为0
此时,E=1-127(1-1023),有效数字不再加上第一位的1,因为在极小的指数面前,任何乘数都变得没有意义,此时表示的是一个非常接近0的数字——有时我们会拿来表示±0,
0 00000000 0000000000000000000000
➤情况三:E全为1
此时,如果有效数字全为0,表示正负无穷大(正负号取决于s)
0 11111111 00010000000000000000000
至此,所有数据存储的理论部分就全部介绍完了,感谢您的收看。