当前位置: 首页 > news >正文

在网站文字上做笔记哪里有免费的网站域名

在网站文字上做笔记,哪里有免费的网站域名,网站建设知名企业,洛阳建筑公司排名🚀🚀🚀 如果文章对你有帮助不要忘记点赞关注收藏哦🚀🚀🚀 文章目录⭐浮点数在内存中的存储1.1 🤓举个例子:1.2浮点数存储规则🌈:对于M与E有一些特别规定1.3解释前面题目&…

🚀🚀🚀 如果文章对你有帮助不要忘记点赞关注收藏哦🚀🚀🚀

文章目录

  • ⭐浮点数在内存中的存储
    • 1.1 🤓举个例子:
    • 1.2浮点数存储规则🌈:
    • 对于M与E有一些特别规定
    • 1.3解释前面题目:
    • 完结


⭐浮点数在内存中的存储

float、double、long double

浮点数的范围定义在float.h头文件中

1.1 🤓举个例子:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>int main()
{int num = 5;float* pfloat = (float*)&num;printf("num的值为:%d\n", num);printf("*pFloat的值为:%f\n", *pfloat);*pfloat = 9.0;printf("num的值为:%d\n", num);printf("*pFloat的值为:%f\n", *pfloat);return 0;
}

输出结果

在这里插入图片描述

​ 这里肯定会有小伙伴好奇,int于float都是四个字节,为什么只是改变&num的指针类型,用%d的方式取出来值没有变化,用%f读取出来 * pfloat的值也就是num的数值会是0??而用浮点数给 * pfloat重新赋值用%d打印又不对,用%f打印出来又正常。

​ 我们都知道改变了指针类型,里面的二进制数据是不会变的,只不过读取大小和读取方式有区别,而int于float又都是四个字节,那就证明,浮点型的存取方式与整形不相同。

1.2浮点数存储规则🌈:

如果说浮点数与整数在内存中的存取方式不相同,那么浮点数的存储规则是什么呢 ?

实际上浮点数是以科学计数法的方式存储在内存中

  • (-1)^ S * M * 2^E (// 此处的^均代表指数,而不是异或)
  • S代表符号位,由于内存中存储的是二进制所以S只有0和1,0代表正数(-1的0次幂为1),1代表负数(-1的1次幂为-1)
  • M代表有效数字 大于1小于2
  • E代表 2的指数位

🌞IEEE 754标准规定,32位浮点数最高的1位是符号位s,接下来8位是指数E,剩下的23位为M.

在这里插入图片描述

64位浮点数最高的1位是符号位s,接下来11位是指数E,剩下的52位为M。

在这里插入图片描述

对于M与E有一些特别规定

​ 标准规定,对于M,由于一定是1.XXXXX,所以可以舍去第一位,取出的时候加上即可,所以存在M中的数据就是1.后面的数字,这样做可以节省一位数字,虽然M只有23位,但是节省一位之后就可以存储相当于24位的数字了。

​ 对于E,E是一个无符号整数,拿单精度浮点型float举例,E为8位,所以它的取值范围为0-255,但是科学计数法中E是可以出现负数的,,所以IEEE754标准规定,存入内存时E必须加上一个中间数,对于八位的E,这个中间数是127,对于11位的E这个中间数是1023,比如单精度E为10,那么在存储的时候,将E加上127,保存在内存中就是10001001。

​ 以上为E的存储情况,E取出的时候还分为三种情况:

E不为全0或者不为全1

这时浮点数采用下面的规则,指数E减去127(或者1023),得到真实E的值,再将M的前面加回第一位的1.

E为全0

这时,浮点数的指数E=1-127(或者1-1023)就是真实值

有效数字M不再加上前面的第一位1,这样做是为了表示±0,就是一个接近于0的一个很小的数字

E为全1

相当于±无穷大(对于float本身来说)

ps:

实际上浮点数是以科学计数法的方式存储在内存中,S、E、M是科学计数法的不同部分

​ 比如存储一个float类型110.75,计算机中存储的是二进制,转化为二进制数据1101110.11用科学计数法就表示为1.10111011*2^6

其中 符号就代表了S,S=0,1.10111011代表了M,6代表了E,八位二进制为00000110,将E加上127,将m去掉第一位1,所以这个数据存储在内存中应该就是0100 0010 1101 1101 1000 0000 0000 0000,转化为16进制为42DD 8000
让我们验证一下:

在这里插入图片描述
完全正确✨,至于数据为什么是倒着存,这就涉及到大小端字节序问题,请参考这篇博文http://t.csdn.cn/mHrtN

1.3解释前面题目:

int main()
{int num = 5;float* pfloat = (float*)&num;printf("num的值为:%d\n", num);				//5printf("*pFloat的值为:%f\n", *pfloat);		//0.000000*pfloat = 9.0;printf("num的值为:%d\n", num);				//1091567616printf("*pFloat的值为:%f\n", *pfloat);		//9.000000return 0;
}
  • 为什么num 为5,&num转换为浮点型指针就变成了0.000000? 🧐

5的二进制 00000000 00000000 00000000 00000101

转换为浮点型指针进行读取,采用浮点型的规定去读,此时在浮点型看来

在这里插入图片描述
(-1)^ S * M * 2 ^ E = (-1)^ 1 * 0.000000000000000000000101 * 2 ^ (1-127) ( 因为E全为0,参考上面E全为0取出。)

得到一个超级小的数字,对于float来说就根无穷小没有区别,截断等于0.000000。

  • 为什么对*pfloat赋值9.0,用%d输出是1091567616?🤓

将9.0的二进制是1001 科学技术法 1.001*2^3 S=0,E=3,M=1001

用float的方式存储就是 0 10000010 00100000000000000000000

用%d的方式输出,也就是用整数方式把数据读取出来,结果就是1091567616
在这里插入图片描述

最后的pfloat = 9.0用%f输出,用浮点型方式存,用浮点型方式取,自然就是9.000000了。


完结

创作不易,还请各位小伙伴多多点赞👍关注✨收藏⭐

请添加图片描述

http://www.yayakq.cn/news/254224/

相关文章:

  • 沈阳网站设计制作公司张家港阿里网站建设
  • 深圳网站制作建设哪家专业程序小程序开发公司
  • 深圳做律师网站公司友汇网站建设一般多少钱
  • dw中旅游网站怎么做天津专业网站建设
  • 南宁网站建设制作定制wordpress 本地服务器
  • 建设银行的网站特点广州品牌网站设计公司
  • 平面设计软件网站备案用网站建设方案
  • 百度做网站价格110平米三室一厅简装图片
  • 增城做网站要多少钱网站的建设维护推广
  • 阳江建设网站wordpress可以上传网页吗
  • wordpress如何仿站我要下载中国建设网站
  • 网站设计师主要做什么的wordpress版权加密
  • 杭州建设网站网站网站海外seo
  • easyui做网站软件开发是什么意思
  • 大兴建站推广贵阳网站建设黔搜
  • idc销售网站源码公司网站设计模板
  • 资源优化排名网站商丘做网站优化
  • 为什么网站上传照片传不上去网站的整合
  • 网站建设 推广wordpress帮助中心模板
  • 笑话网站 wordpress外贸网站建设服务商
  • dw代码做网站网站主域名是什么
  • 黄山网站设计成都设计公司排行
  • 四川网站建设方案设计接单赚钱平台
  • 网站建设佰首选金手指七德米萨erp
  • wordpress 插件下载站成都科技网站建设找
  • 品牌网站建设 蝌蚪小8北京营销型网站建设哪家好
  • 平邑做网站电商型网站是否是趋势
  • 电商商城开发网站排名优化有哪些牛霸天的软件1
  • 网站上的定位功能如何实现的金坛做网站公司
  • 织梦wap手机网站模板如何在linux服务器上架设网站