c语言中double是什么意思_double c语言

2023-06-18 01:14:23 来源: 互联网

1、使用printf时,它们具有相同的格式说明符,但使用scanf时,它们没有相同的格式说明符。

2、为什么是这样?因为printf的参数被提升,而scanf的参数(作为指针)却不被提升。


(资料图片仅供参考)

3、这种论点提升到底是什么?当较小尺寸的参数(特别是char,short和float)传递给可变参数函数(如printf之类的函数,其参数数量不固定)时,它们将转换为较大尺寸。

4、Char和short转换为int,float转换为double。

5、为什么这样 据我所知,纯粹出于历史原因。

6、C的设计师认为这是个好主意,因为这些转换基本上是免费的,因为所有类型的尺寸都足够小,可以放入单个寄存器或堆栈中的单个“单元”(将内容压入堆栈必须与某些字节边界对齐,例如,堆栈上的每个项目都必须以4的倍数的地址开头。

7、同样,显然,这种转换减少了传递参数时的错误。

8、因此,当您向printf传递float类型的参数时,实际上它会在转换为printf之前就转换为double类型。

9、我们可以使用调试器证明这一点。

10、我写了下面的C代码:主要功能编译成:领取关于C/C++更多学习资料:我在调用printf之前(在地址0x63b处)放了一个断点。

11、根据Linux x86_64调用约定,浮点参数在XMM寄存器中传递(CPU中特殊的小内存位置,可用于对多条数据并行执行同一条指令,但实际上可用于大多数事情) 。

12、因此,我查看了第一个XMM寄存器xmm0,然后:xmm0中的值之一,当解释为双精度值时,是1,恰好是我们传递给printf的值。

13、同时,当将该寄存器中的值解释为浮点数时,它们是这样(巧合的是,我们得到1.875)。

14、因此,转换确实发生了。

15、这就解释了为什么对于printf,我们在浮点数和双精度参数中都使用%f -浮点数无论如何都会转换为双精度,因此printf不能分辨出两者之间的区别。

16、同时,scanf的参数是指针,因此不受此转换的限制。

17、其原因是因为所有指针类型仅包含内存地址,并且所有内存地址都具有相同的大小(在我的64位计算机上为64位)。

18、因此,当scanf在其格式字符串中获得%f时,它将期望一个float *类型的指针,而当它获得%lf时,将期望得到double *类型的指针。

19、如果格式说明符和指针的类型不匹配,则会产生一些有趣的结果。

20、由于float的大小为4个字节,而double的大小为8个字节(至少在我的机器上),因此当我们写入float *类型的指针所指向的位置时,我们将覆盖4个字节的内存。

21、同时,如果我们写入由双*指向的位置,则将覆盖8个字节的内存。

22、考虑以下代码:printf说明符上的.15标志只是使printf精确度更高。

23、由于我们使用的是双精度值(并且正如我刚刚说的那样,%f也适用于printf的双精度值),因此我们实际上可以访问具有这种精度的数字(只要它们不是太大而不能填充即可。

24、我实际上不是对浮点表示非常了解)编译并运行后,结果如下:如您所见,如果我们忽略所有类型的fuckery,则数字应该匹配,但它们甚至不相近。

25、这是为什么?好吧,我们给scanf%f说明符,所以它期望一个浮点数*。

26、但是我们传递了一个双*。

27、现在,这些指针的实际值都只是地址-scanf不知道它们之间的区别。

28、它进行了下去,读取我们输入的值,并将其存储为float 。

29、但是浮点数仅占用4个字节,因此scanf只会在我们可用的double变量的8个字节中写入4个字节。

30、在我的情况下,由于我的机器是低位字节序的,因此似乎对应于double变量的细粒度(小有效位)数字的第4个字节将被覆盖。

31、因此,当我们打印出double double back时,我们得到的数字几乎与以前相同,但最低有效数字有所变化。

32、有想学习更多C/C++知识的,可以点击下方了解更多,领取免费学习资料:。

本文就为大家分享到这里,希望小伙伴们会喜欢。

关键词

精选 导读

c语言中double是什么意思_double c语言

1、使用printf时,它们具有相同的格式说明符,但使用scanf时,它们没有

发布时间: 2023-06-18 01:14
资讯   2023-06-18

研究员系列职称怎么评审_研究员系列职称 环球简讯

1、研究员职称系列包括实习研究员(初级),助理研究员(中级),副研

发布时间: 2023-06-18 01:04
宏观   2023-06-18

焦点速讯:wap技术(关于wap技术的基本详情介绍)

1、从技术的角度来说,《WAP开发使用指南》覆盖了WAP的各个技术细节。2

发布时间: 2023-06-18 01:14
关注   2023-06-18

全球热点!张绍刚被打视频图片真实_张绍刚被打视频图

1、貌似是被一位求职者打的。2、肯能是张绍刚说话太直接。3、把别人给

发布时间: 2023-06-18 00:44
热点   2023-06-18

全球今头条!小攻往小受菊花塞冰块 小受的菊花离不开道具

1、书名:王谢留燕华这个情节好像在比较后面一点。2、但就这个书名不会

发布时间: 2023-06-17 23:08
热点   2023-06-17

【当前热闻】英雄联盟丽桑卓魔女皮肤_暗星女王 英雄联盟中

暗星女王,是《英雄联盟》中丽桑卓的皮肤。。本文到此结束,希望对大家

发布时间: 2023-06-17 22:39
资讯   2023-06-17

2023安全创客汇复赛重庆站在两江新区举行|天天时讯

常碧罗张廉6月15日,2023安全创客汇复赛重庆站在两江新区举行。50家来

发布时间: 2023-06-17 22:37
宏观   2023-06-17

6月18日雨水持续 19日起天气转晴好

6月17日白天陕西大部阴天,中南部大部以小雨为主,其中,东部地方中雨

发布时间: 2023-06-17 22:48
关注   2023-06-17

「侠客岛」今天的话题,从一座北京小院开始……

北京前门附近的青云胡同23号到29号院,曾经有些冷清:南院一间残房,中

发布时间: 2023-06-17 22:10
热点   2023-06-17

190cw9分辨率_190cw9-焦点消息

1、根据1楼朋友放出的数据。2、190CW9稍胜。3、同时190CW9也是近期值得

发布时间: 2023-06-17 21:51
资讯   2023-06-17

痛风的症状及治疗方法_快速治疗便秘的方法

1、快速治疗便秘的方法,主要包括以下内容:2、第一,泻药。在临床上应

发布时间: 2023-06-17 21:52
宏观   2023-06-17

暑期游|玲娜贝儿、星黛露来了!华南首个“达菲与好友”主题

文 羊城晚报全媒体记者刘星彤图 香港迪士尼乐园提供6月17日,香港迪士

发布时间: 2023-06-17 22:02
关注   2023-06-17

官路红颜第三部第一章_官路红颜娇媚txt下载

1、《官路红颜娇媚》百度网盘txt最新全集下载;链接:提取码:zuwc讲述了

发布时间: 2023-06-17 21:55
热点   2023-06-17

农旅融合 乡村振兴 《新闻联播》点赞文山-世界速看料

6月17日,央视《新闻联播》以《云南文山推动农旅融合绘就乡村振兴新画

发布时间: 2023-06-17 21:14
资讯   2023-06-17

环球快看点丨安部公房文集

1、《安部公房文集》是珠海出版社出版发行的图书,作者是[日]安部公房

发布时间: 2023-06-17 21:02
宏观   2023-06-17

案例 山东男子17万入股农村信用社,58年后的分红金额让他愣

案例山东男子17万入股农村信用社,58年后的分红金额让他愣住了,山东省,

发布时间: 2023-06-17 20:55
关注   2023-06-17

免流卡激活不了(免流卡激活)|世界看热讯

你们好,最近小活发现有诸多的小伙伴们对于免流卡激活不了,免流卡激活

发布时间: 2023-06-17 20:53
热点   2023-06-17

小儿推拿能退烧吗_小儿推拿退烧六步图

一般感冒,平肝10分钟,从小儿食指指根推到指尖,清肺10分钟,从小儿无

发布时间: 2023-06-17 21:00
资讯   2023-06-17

世界热点!定淮门站_关于定淮门站介绍

1、定淮门站是南京地铁9号线的一座车站。2、线路包括:丹霞路、曹后村

发布时间: 2023-06-17 20:52
宏观   2023-06-17

没有权限查看工作组计算机怎么办啊_没有权限查看工作组计算

1、引发这种故障的原因比较多,用户可以从以下几个方面尝试解决此问题

发布时间: 2023-06-17 20:53
关注   2023-06-17