rp网站做多大,在线教育网站源码,谭海波博客简介 wordpress,移动端网站生成器#x1f31f;#x1f31f;作者主页#xff1a;ephemerals__
#x1f31f;#x1f31f;所属专栏#xff1a;C语言
目录
前言
一、整数的存储
二、大小端字节序及其判断
1.什么是大小端
2.为什么有大小端
3.用c语言编写程序判断大小端
三、浮点数的存储
1.浮点数…作者主页ephemerals__
所属专栏C语言
目录
前言
一、整数的存储
二、大小端字节序及其判断
1.什么是大小端
2.为什么有大小端
3.用c语言编写程序判断大小端
三、浮点数的存储
1.浮点数的存储规则
2.浮点数的存储过程
3.浮点数的读取过程
总结 前言 我们都知道在计算机中数据都是以二进制的形式存储的。但是对于整数和浮点数而言它们的存储方式却略有不同。今天我们深入探讨以下整数和浮点数在内存中的存储。
一、整数的存储 整数的二进制表示方法有三种原码反码和补码。当表示有符号的整数时这三种表示方法都有符号位和数值位两部分符号位占一个二进制位最高位数值位占其余二进制位当符号位为0时表示这是一个正数为1时表示这是一个负数。
这里需要注意以下两点
1.正整数的源码反码和补码相同。
2.对于负整数三者均不相同 原码直接将数值翻译成二进制数。 反码符号位不变数值位按位取反。 补码源码1得到补码。
正数的存储方式一律以补码的形式存储。
二、大小端字节序及其判断 首先我们来运行一段代码 我们给a赋值0x11223344但是在内存窗口中这四个字节的内容却是倒着排放的。这是为什么呢
这就涉及到大小端的问题了。
1.什么是大小端 对于一个超过一字节的数据在内存中存储的时候我们就需要考虑到字节排列的顺序问题。我们根据不同的字节存储顺序将其分为大端字节序和小端字节序。它们的含义是
大端字节序表示低位的字节内容存放在高地址处高位字节内容存放在低地址处。
小端字节序表示低位的字节内容存放在低地址处高位字节内容存放在高地址处。
我们画图表示以下大小端的含义 2.为什么有大小端 那么为什么会有大小端呢 因为在很多编程语言当中许多数据类型的内存大小是大于一个字节8bit的它们存储在宽度大于一个字节的寄存器当中时必然存在多个字节安排顺序的问题。因此大端字节序和小端字节序就出现了。
3.用c语言编写程序判断大小端 在了解了大小端的概念及成因后我们就可以由此来写一个程序判断当前机器是大端还是小端了
#include stdio.hint main()
{int a 0x11223344;char* p a;//用char型指针访问int型变量访问其最低地址的空间printf(%x\n, *p);return 0;
}
运行结果 可以看到程序以十六进制形式打印出了这个数的最低位。由于char型指针访问的是int类型的最低地址空间这就说明最低地址存放的是低位的字节内容所以作者的电脑是小端字节序。
三、浮点数的存储 了解了整数的存储之后我们来探讨一下浮点数的存储。首先我们可以猜一猜以下代码的运行结果
#include stdio.hint main()
{int n 9;float* p (float*)n;printf(n的值为%d\n, n);printf(*p的值为%f\n, *p);*p 9.0f;printf(n的值为%d\n, n);printf(*p的值为%f\n, *p);return 0;
}
结果如下 看到结果想必你会大吃一惊吧为什么同一个数以不同的类型输出会有这么大的差异这就关乎浮点数在内存中的存储了。
1.浮点数的存储规则 根据国际IEEE754标准任意一个二进制的浮点数都可以表示成如下形式 其中表示符号位S为0时表示V是一个正数S为1时表示V是一个负数。 表示V的有效数字。。 表示指数位。 举个例子对于浮点数5.0它的二进制形式是101.0写成科学计数法就是。
这样根据刚才的格式S0,M1.01,E2。
我们可以发现对于一个浮点数只要知道了S,M,E这三个值就能得出这个浮点数的值。在计算机中浮点数也是将这三个数存储到内存中使用时根据规则就能够得到该值。这三个数的存储规则如下
对于32位的浮点数最高位存储S接下来的8位存储E剩下的23位存储M。
对于64位的浮点数最高位存储S接下来的11位存储E剩下的52位存储M。 2.浮点数的存储过程 1.对于有效数字M由于就是1.xxxxxx的形式那么这个个位数“1”就可以不用存储只存储小数部分这样就可以多存储一位有效数字。 2.对于指数E首先这里的E一定是一个无符号整数但是科学计数法的指数是可以出现负数的所以IEEE754规定存入E时要给它加上一个中间数再存储。对于8位的E中间数是127对于11位的E这个中间数是1023。 3.浮点数的读取过程 浮点数的读取过程分三种情况 1.E的各位不全为0或者不全为1此时将E的值取出并减去127或1023得到真实值然后将有效数字M加上1。 2.E全为0此时E的真实值变成1-127或1-1023并且M不再加1这用于表示±0或者极小的数字。 3.E全为1此时如果有效数字M全为0这个数就表示正负无穷大符号由S决定。 了解了浮点数的存储规则存储过程和读取过程之后之前代码的运行结果就能够说明白了。
总结 这篇文章我们探讨了整数的存储、大小端的概念和判断方式、浮点型数据的存储规则存储过程和读取过程进一步了解了计算机底层数据的存储模式。之后博主会继续跟大家分享c语言相关内容感谢大家的支持❤❤❤